Java - 按住某个键后 KeyBinds 停止工作

标签 java swing key-bindings

*更新 - 我从 MacBook 上取出了我的项目,并将其移至 Windows 计算机(相同的代码),并且代码按照预期运行!有谁知道为什么会发生这种情况?

这是我在 Stack Overflow 上的第一个问题,因此我会尽力进行正确的格式设置。

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

我已经搜索了两个多小时的答案,但没有结果。每个看似相似的问题最终都会得到焦点问题的答案,并在 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!");
            }
          }
        });


}

最佳答案

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

关于Java - 按住某个键后 KeyBinds 停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335285/

相关文章:

java - 使用 jar 构建 java 项目到一个 jar 中(命令行)

java - RxJava : Return List Containing Past And Current Result

JAVA、GUI JPanel、JFrame、paintComponent、图形

java - 调用 run 方法后主线程被另一个线程中断?

java - 我可以在 Jogl 中嵌入 Swing 组件吗?

cocoa - 如何为 NSApp.dockTile 创建绑定(bind)

java - 如何从 Set 创建 HashSet?

java - 在纹理中切割一个半透明的正方形

java - 键绑定(bind)代码不起作用

java - 如何更改JTabbed Panel中箭头键的默认功能?