【问题标题】:Java - KeyBinds stop working after holding down a keyJava - 按住键后 KeyBinds 停止工作
【发布时间】:2016-10-31 00:58:57
【问题描述】:

*更新 - 我从我的 MacBook 中取出我的项目并将其移至 Windows 计算机(完全相同的代码)并且代码按预期工作!有谁知道为什么会这样?

这是我在 Stack Overflow 上的第一个问题,所以我会尽我所能做正确的格式。

我正在制作一个简单的 Pong 程序,它需要一个球拍在关键事件(A 和 Z)上上下移动。当我简单地键入一个键时,键事件工作得很好,但是当我由于某种原因按住一个键太久时,键事件完全停止工作,这意味着即使键入键也不会再注册任何东西,直到我重新启动程序.

我已经搜索了超过 2 个小时的答案,但无济于事。每个看起来相似的问题都会以焦点为问题的答案结束,并在 InputMap 中添加 JComponent.WHEN_IN_FOCUSED_WINDOW。但是我已经尝试过了,它根本没有帮助或解决我的问题。

这是我的代码:

public class ColorPanel extends JPanel implements ActionListener{
    public ColorPanel(Color backColor, int width, int height){

   //Non Relavent coding removed

    //Code for KeyBinding

    InputMap im = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
    ActionMap am = getActionMap();

    im.put(KeyStroke.getKeyStroke(65, 0, false), "actionName");
    im.put(KeyStroke.getKeyStroke(65, 0, true), "actionName");
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, true), "actionName");
    im.put(KeyStroke.getKeyStroke(KeyEvent.VK_Z, 0, false), "actionName");

    am.put("actionName", new AbstractAction("actionName") {
          public void actionPerformed(ActionEvent e) {
            //System.out.println("---" + e.getActionCommand() + "---");
            if(e.getActionCommand().equals("a")){
                System.out.println("a!");
            }else if (e.getActionCommand().equals("z")){
                System.out.println("z!");
            }
          }
        });


}

【问题讨论】:

  • 在 Windows 7 上使用 JDK8 对我来说效果很好。我只是在 JFrame 上使用了一个面板。 This is my first question here on Stack Overflow - 发布正确的SSCCE 来演示问题。我们不知道您的程序中是否还有其他可能导致问题的原因。
  • 我查看了您所说的内容,并在我使用 mac 时在 windows 设备上尝试了我的项目。问题消失了!?你知道为什么会发生这种情况吗?
  • 我从未使用过 Mac,所以我不确定会出现什么问题。然而,在 Windows 上,当您按住某个键时,您会生成诸如“按下、按下、按下、......释放”之类的事件。即“已发布”事件仅生成一次。在 Mac 上,我相信你会得到:“按下、释放、按下、释放、按下、释放”。那是由于某种原因,释放的事件不断产生。也许这是造成差异的原因?

标签: java swing key-bindings


【解决方案1】:

您需要禁用通常在按住某个键时出现的 macOS 重音弹出窗口。出于某种原因,这使 Java 感到困惑。见这里:http://www.techradar.com/how-to/computing/apple/easy-mac-hacks-disable-the-pop-up-accent-window-when-typing-1305618

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多