Mac上的Java KeyEvents

时间:2011-10-21 11:01:17

标签: java macos swing osx-snow-leopard

我正在尝试编写一个使用键事件来激活方法的程序。该代码适用于Windows机器,但是当转换到Mac时它没有响应我按下的“空格键”。我认为这与使用的不同密钥代码有关。

public void keyPressed(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.VK_SPACE) {
        System.out.println("SPACEBAR");
        grid.stepGame();

    }
}

我有什么想法可以让它在Mac上运行吗?

编辑 - 使用下面的答案解决了问题 - 注意虽然看起来在Mac上Frame永远不会自动重新获得焦点,因此keylistener无法工作的原因是另一个JComponent被激活。

1 个答案:

答案 0 :(得分:4)

我不确定你的具体问题,但是如果你转而使用key bindings而不是关键的听众,你的问题就会消失,这是一个不错的选择。 从Java Tutorials站点:

  

注意:   要定义对特定键的特殊反应,请使用键绑定而不是键侦听器。

作为一个例子

// Component that you want listening to your key
JComponent component = ...;
component.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0),
                        "actionMapKey");
component.getActionMap().put("actionMapKey",
                         someAction);