java - 具有多个键的键绑定(bind)

标签 java swing combinations key-bindings

我使用此代码将键盘按键绑定(bind)到自定义操作,而不使用 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 时,向左 操作不再被触发,如果两个按键的事件都被触发,那就太好了。

有没有办法将键绑定(bind)与组合键结合使用?

最佳答案

参见Motion Using the KeyBoard寻找潜在的解决方案。

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

关于java - 具有多个键的键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17884384/

相关文章:

java - 使用 EJB 的 Swing 应用程序

java - Hibernate 1 到 M 对 child 的限制

java - ArrayList 找不到符号

java - 在我的 for 循环中找不到逻辑错误

c - 使用嵌套循环仅打印一个组合

java - 尝试使照片滤镜的效果在 photo-java swing 上累积

java - 在这个例子中如何绘制一个条形?

java - 如何不断验证 JTextField?

r - 通过重复在 R 中获得不同的组合

machine-learning - 如何在不使用计算器或代码的情况下手动计算(200)C(100)和这么大的数字的组合?