【问题标题】:Key bindings with multiple keys具有多个键的键绑定
【发布时间】:2013-07-26 14:43:19
【问题描述】:

我正在使用此代码将键盘键绑定到自定义操作,而不使用 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 的同时按 ie SPACE 时,left 操作不再触发,如果触发两个按键的事件。

有什么方法可以通过组合键使用键绑定?

【问题讨论】:

    标签: java swing combinations key-bindings


    【解决方案1】:

    请参阅Motion Using the KeyBoard 了解潜在的解决方案。

    仅会为最后一次按下的键生成事件,因此您需要手动跟踪已按下的任何其他键(并继续手动模拟触发事件)。无论您使用键绑定还是 KeyListener 都是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多