java - 单击按钮后 keylistener 不工作

标签 java swing keylistener

我有一个 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/

相关文章:

java - 如何将 gradle java 项目添加为 Android Studio 的依赖项

java - android:没有这样的实例字段

java - 在 android 中使用字符串的数字选择器显示完整的文本值

swing - 总是显示 JavaFX 的提示文本?

java - GridLayout 与尺寸不成比例

java - 按下任何键时鼠标无法移动Java Swing

java - PhraseQuery 在 Apache lucene 7.2.1 中不起作用

java - 删除 JScrollPane 内的边框

java - ActionListener 不工作

java - 简单的 KeyListener 不起作用