我正在使用以下代码将键盘按键绑定到自定义操作,而不使用KeyListener
:
Action left = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("pressed left key");
}
};
Action right = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("pressed right key");
}
};
Action space = new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("pressed space key");
}
};
myJPanel.getInputMap().put(KeyStroke.getKeyStroke("LEFT"), "pressedLeft");
myJPanel.getInputMap().put(KeyStroke.getKeyStroke("A"), "pressedLeft");
myJPanel.getActionMap().put("pressedLeft", left);
myJPanel.getInputMap().put(KeyStroke.getKeyStroke("RIGHT"), "pressedRight");
myJPanel.getInputMap().put(KeyStroke.getKeyStroke("D"), "pressedRight");
myJPanel.getActionMap().put("pressedRight", right);
myJPanel.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "pressedSpace");
myJPanel.getActionMap().put("pressedSpace", space);
一切工作正常,但是我注意到当我按住A的同时按下SPACE时,不再触发
left
动作,如果同时触发两个按下的键的事件,那就太好了。有什么方法可以将按键绑定与按键组合一起使用吗?
最佳答案
有关可能的解决方案,请参见Motion Using the KeyBoard。
仅针对最后按下的键生成一个事件,因此您需要手动跟踪已按下的任何其他键(并继续手动模拟触发该事件)。无论您使用键绑定还是KeyListener,都是如此。