【发布时间】: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