1

我正在使用此代码将键盘键绑定到自定义操作,而不使用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);

一切正常,但我注意到当我按住 ie 时按下SPACEA动作left不再触发,如果两个按键的事件都被触发,那就太好了。

有没有办法将键绑定与键组合一起使用?

4

1 回答 1

2

有关可能的解决方案,请参阅使用键盘进行运动。

仅针对最后按下的键生成事件,因此您需要手动跟踪已按下的任何其他键(并保持手动模拟触发事件)。无论您使用键绑定还是 KeyListener,这都是正确的。

于 2013-07-26T14:57:29.663 回答