Java:处理组合键盘输入
在注册在JButton之后的KeyListener中,F1和(即CTRL+F1)各自的SHIFT-CTRL+F1之间的正确分隔方式是什么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分
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)的父级
由于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请不要只关注一项编辑任务-在这个问题上还有很多事情可以做(标题中的标记,谢谢,最后可能会突出显示关键字),任何编辑都应该尝试修复所有问题,而不仅仅是一件事。=)