Java:处理组合键盘输入

Java:处理组合键盘输入,java,event-handling,keyboard,Java,Event Handling,Keyboard,在注册在JButton之后的KeyListener中,F1和(即CTRL+F1)各自的SHIFT-CTRL+F1之间的正确分隔方式是什么 public void keyPressed(KeyEvent event) { int key = event.getKeyCode(); logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")"); } 。。F1总是给我112分

在注册在JButton之后的KeyListener中,F1和(即CTRL+F1)各自的SHIFT-CTRL+F1之间的正确分隔方式是什么

public void keyPressed(KeyEvent event) {
    int key = event.getKeyCode();

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}
。。F1总是给我112分,F2总是给我113分,以此类推。我知道我可以通过自己处理CTRL/SHIFT/ALT/etc的释放键的keyPressed()来处理它,但我希望有更好的方法


非常感谢

解决方案位于KeyEvent(InputEvent)的父级

  • 使用isAltDown、isControlDown、ISShift Down方法或
  • 使用getModifiers方法

  • 由于KeyEvent扩展了InputEvent,并且。

    很明显,每当一个键按下时,就会调用key down事件。 这不是一个多键按下事件,也没有这样的事情,所以没有多键按下的键码

    您只需要使用一个变量来跟踪按下的crtl键。这意味着您还必须使用key up事件来跟踪何时释放控制键

    在pusedo代码中:

    // CRTLKeyCode is whatever the code is for the ctrl key private boolean ctrlPressed = false; onKeyDown(KeyEvent event){ int key = event.getKeyCode(); if(key == CRTLKeyCode) ctrlPressed = true; else if(ctrlPressed && key == 112) //Perform your action } onKeyUp(KeyEvent event){ int key = event.getKeyCode(); if(key == CRTLKeyCode) ctrlPressed = false; } //CRTLKeyCode是ctrl键的任何代码 私有布尔ctrlPressed=false; onKeyDown(KeyEvent事件){ int key=event.getKeyCode(); 如果(键==CRTLKeyCode) ctrlPressed=真; else if(ctrlPressed&&key==112) //执行你的行动 } onKeyUp(KeyEvent事件){ int key=event.getKeyCode(); 如果(键==CRTLKeyCode) ctrlPressed=false; }
    KeyEvent
    s在处理Swing小部件时可能有点低级。相反,请查看
    InputMap
    ActionMap

    非常感谢,但我认为使用isXxxDown()按需获取状态要容易得多正如Midhat/bcash建议的那样,我可以自己管理状态。@ThomasAbraham请不要只关注一项编辑任务-在这个问题上还有很多事情可以做(标题中的标记,谢谢,最后可能会突出显示关键字),任何编辑都应该尝试修复所有问题,而不仅仅是一件事。=)