【问题标题】:Java - How to force buttons to bottom of panel after others have been removed?Java - 如何在其他按钮被删除后强制按钮到面板底部?
【发布时间】:2016-02-24 08:06:28
【问题描述】:

我正在用 Java 制作一个非常简单的游戏,当您按下键盘上的一个按钮时,相应的按钮会被移除,但是我希望在移除一个按钮时所有按钮都相应地被推到底部。我不确定我应该在代码中的哪个位置执行此操作或使用什么方法。有没有办法打包框架,让所有东西都固定在底部?

这是程序运行时的图片:

当我按下第三个按钮时,我希望它上面的积木落在其余的上面(类似于其他下落积木游戏)。

public class Game implements Runnable, KeyListener {

JFrame _frame = new JFrame("Window");
JPanel _pan = new JPanel();


Character[] buttonsToAdd = { 'A', 'B', 'C', 'D' };
List<Character> shuffled = Arrays.asList(buttonsToAdd);     
Map<Character, JButton> buttons = new HashMap<Character, JButton>();

@Override
public void run() {

    _frame.add(_pan);
    _frame.setVisible(true);
    _pan.setLayout(new GridLayout(buttonsToAdd.length, 0));

    for (char c : buttonsToAdd) {
        JButton button = new JButton(c + "");
        Collections.shuffle(shuffled);
        _pan.add(button);
        buttons.put(c, button);
        button.addKeyListener(this);
    }

    _frame.pack();
    _frame.setLocationRelativeTo(null);
    _frame.setResizable(true);


}

@Override
public void keyTyped(KeyEvent e) { }

@Override
public void keyPressed(KeyEvent e) {
    char key = e.getKeyChar();
    System.out.println(key);
    JButton button = null;

    if ((button = buttons.get(Character.toUpperCase(key))) != null) {
        _pan.remove(button);
        _pan.invalidate();
        _frame.repaint();
    }
}

@Override
public void keyReleased(KeyEvent e) { }

}

另外,我将按钮设置为随机使用哪些字母(A-D),但如果有两个 A 按钮,我只能删除一个,再次按 A 不会删除另一个。按下 A 时如何删除两个 A 按钮?

我已经为此苦苦挣扎了一段时间,任何帮助将不胜感激。

谢谢!

【问题讨论】:

    标签: java jframe jpanel jbutton keylistener


    【解决方案1】:

    您应该能够使用 BoxLayout。

    Box box = new Box.createVerticalBox();
    box.add( Box.createVerticalGlue() );
    box.add( button1 );
    box.add( button2 );
    ...
    

    随着面板中有更多可用空间,“胶水”将扩大。阅读 How to Use BoxLayout 上的 Swing 教程部分,了解更多信息和示例。

    另外,不要使用 KeyListener。 Swing 被设计为与键绑定一起使用。有关使用此方法的工作示例,请参阅:https://stackoverflow.com/a/33809134/131872

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-26
      • 2011-02-02
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多