首先,感谢您花时间阅读我的问题,我很感激。
这是我现在所拥有的概述:
我正在编写一个滑块益智游戏,3 x 3 使用按钮作为网格单元。我添加了一个键监听器来JPanel保存这些按钮,它们对键盘事件的响应很好。
然而,这个问题有点奇怪,我还不能确定为什么它会呈现这种不稳定的行为。单击其中一个“按钮”后,没有一个注册了事件侦听器,没有一个按钮移动,但是当您跟随一个键事件时,键变得无响应。
我的问题是:我知道这很模糊,但这是否对任何人敲响了 Java 问题的警钟,或者听起来像是我的错误代码在这一切背后?
我真的很愿意接受任何建议,因为这已经困扰我大约一个星期了,我仍然不知道是什么导致了问题。
再次感谢您抽出宝贵时间阅读此内容。
@trashgod:是的,当然。
public class Test2 extends JPanel{
JButton a = new JButton("A");
Test2(){
setFocusable(true);
// Set layout to grid layout
setLayout(new GridLayout(3, 3));
// Add button
//a.setEnabled(false);
add(a);
// Register key event which shifts it to the next cell when the right arrow is pressed
addKeyListener(new KeyAdapter(){
public void keyPressed(KeyEvent e){
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
remove(a);
JButton b = new JButton("B");
//b.setEnabled(false);
add(b);
add(a);
validate();
}
}
});
}
}
代码片段功能:JPanel 接收到按键事件,准确地说是向左箭头键,移除按钮'a',并添加一个新按钮'b',然后每次都添加按钮'a'。但是,如果您尝试运行该程序,在您单击一个按钮后,它就会停止监听关键事件。
我刚刚考虑了一下,这可能与 JPanel 中失去焦点有关吗?如果是这样,我应该注意哪些特殊方法来恢复失去的焦点?
谢谢!
(顺便说一句,setEnabled 评论是我尝试通过简单地禁用按钮来解决这个问题,但如果这是手头的问题,它仍然没有解释如何将失去的焦点恢复到 JPanel。)