我有一个 keylistener 附加到我的 java 框架,当我按下任何键时我可以检测到按键,但是发生了一件奇怪的事情。我的游戏是扫雷游戏,我有一个重启按钮,基本上可以清除棋盘并重新挖矿。奇怪的是,当我用鼠标单击按钮时,一切都正常,并且板子被重新启动,但 keylistener 停止工作。更奇怪的是,我有一个 jmenuitem,它基本上可以自动点击按钮。所以它就像 restartbutton.doclick()
如果我单击 jmenuitem 重新启动它重新启动正常清除所有内容并且 keylistener 仍然有效。我什至可以看到按钮被点击。知道为什么会发生这种情况吗?
谢谢
这是附在我的主框架上的。这是单击按钮后停止工作的监听器。
frame.addKeyListener(new KeyListener(){
public void keyReleased(KeyEvent e){
}
public void keyPressed(KeyEvent e){
System.out.println("hey");
int keycode = e.getKeyCode();
if(e.isControlDown() & keycode==KeyEvent.VK_C){
balh blah balh
}
}
public void keyTyped(KeyEvent e){
}
});
最佳答案
建议:
- 您的问题是焦点问题,其中 KeyListener 停止工作,因为它正在监听的容器已将焦点转移到 JButton。
- 一种解决方案是通过调用
setFocusable(false)
使 JButton 无法获得焦点。 - 但我建议您尽可能不要使用 KeyListener,而是使用键绑定(bind),因为使用绑定(bind)您不会遇到这个问题,而且它是更高级别的构造。
编辑
关于:
what would be the best way to change that to a key binding?
最好是通过 Key Bindings tutorial并实现那里的建议。
关于java - 单击按钮后 keylistener 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8074316/