首先,感谢您抽出时间阅读我的问题,我很感激。
以下是我目前的情况概述:
我正在编写一个滑块拼图游戏,使用按钮作为网格单元,大小为3 x 3。我已经在包含这些按钮的JPanel上添加了键盘监听器,它们对键盘事件做出了良好的响应。
然而,问题有点奇怪,我还没有真正能够确定为什么会出现这种不稳定的行为。在单击其中一个没有注册事件监听器的“按钮”之后,没有任何按钮移动,但是当您跟随按键事件时,按键变得无响应。
我的问题是:我知道这相当模糊,但这是否让任何人想起Java问题,还是听起来像是我的错误代码导致了所有这些问题?
我真的很乐意听取任何建议,因为这个问题已经困扰我大约一周了,我仍然不知道是什么原因引起的。
再次感谢您抽出时间查看此内容。
@trashgod: 是的,当然。
以下是我目前的情况概述:
我正在编写一个滑块拼图游戏,使用按钮作为网格单元,大小为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中,如果这是问题所在。)
KeyEvent.VK_LEFT
文档中“非小键盘左箭头键的常量”的哪个部分让您感到困惑?在代码中包含注释时,请确保它们与代码本身匹配。 ;) - Andrew Thompson