单击按钮后keylistener不起作用

Posted

技术标签:

【中文标题】单击按钮后keylistener不起作用【英文标题】:keylistener not working after clicking button 【发布时间】:2011-12-25 20:03:39 【问题描述】:

我在 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)


       

       );

【问题讨论】:

如何添加动作监听器?你能发布一些代码吗?听起来您的重置方法正在重置附加了动作侦听器的项目,但很难说。 不,是专注,纯粹而简单。 框架在工作时没有焦点,所以我不明白它是如何成为焦点的。 @user541597:请参阅 KeyListener 教程和 API。在那里你会看到它必须是一个焦点问题。您收听的容器必须具有焦点,否则关键侦听器将不起作用。期间。 【参考方案1】:

建议:

您的问题是焦点问题,KeyListener 停止工作,因为它正在侦听的容器失去了对 JButton 的焦点。 一种解决方案是通过调用 setFocusable(false) 使 JButton 无法获得焦点。 但我建议您尽可能不要使用 KeyListener,而应使用键绑定,因为使用绑定不会出现此问题,而且它是更高级别的构造。

编辑 关于:

将其更改为键绑定的最佳方法是什么?

最好通过Key Bindings tutorial 并实施那里的建议。

【讨论】:

附加的是我的关键侦听器代码将其更改为键绑定的最佳方法是什么? 即使你使用键绑定,你仍然必须使 jbuttons 不可聚焦,即使使用somerootcomponent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)【参考方案2】:

这是焦点问题,你可以用这段代码重新给焦点

getTopLevelAncestor().requestFocus();

【讨论】:

【参考方案3】:

根据this similar question 的答案,我实现了 KeyEventDispatcher 而不是使用默认侦听器。我相信这个功能将是相当全球化的,所以你可能需要检查并确保正确的东西是可见/集中的。

    KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher( new KeyEventDispatcher() 
      public boolean dispatchKeyEvent(KeyEvent e) 
          if (e.getID() == KeyEvent.KEY_PRESSED) 
              System.out.println("tester");
          
          return false;
      

【讨论】:

【参考方案4】:

我可以通过将容器的setFocused 属性设置为true 来解决这个问题:

frame.setFocusable(true);

【讨论】:

以上是关于单击按钮后keylistener不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有 keylisteners 的 Java swing gui 程序在 linux 中不起作用

单击按钮后,GridView 上的类属性不起作用

单击按钮时,在 setRequestedOrientation 后自动旋转不起作用

添加jquery键盘后,jquery按钮单击事件不起作用

KeyListener 在 JApplet 中不起作用

Java KeyListener 在小程序中不起作用