我正在尝试编写一个使用键事件来激活方法的程序。该代码适用于Windows机器,但是当转换到Mac时它没有响应我按下的“空格键”。我认为这与使用的不同密钥代码有关。
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_SPACE) {
System.out.println("SPACEBAR");
grid.stepGame();
}
}
我有什么想法可以让它在Mac上运行吗?
编辑 - 使用下面的答案解决了问题 - 注意虽然看起来在Mac上Frame永远不会自动重新获得焦点,因此keylistener无法工作的原因是另一个JComponent被激活。
答案 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);