Java:处理组合键盘输入

时间:2008-12-30 18:04:42

标签: java event-handling keyboard

分隔 F1 CTRL + F1 各自 SHIFT - + F1 即JButton?

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

    logger.debug("KeyBoard pressed char(" + event.getKeyChar() + ") code (" + key + ")");
}

..总是给我112 F1 ,113为 F2 ,依此类推。我知道我可以通过自己处理keyPressed()来处理它,对于我自己的 CTRL / SHIFT / ALT / etc的keyReleased ,但我希望有更好的方法。

非常感谢!!!

4 个答案:

答案 0 :(得分:4)

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

  1. 使用isAltDown,isControlDown,isShiftDown方法或
  2. 使用getModifiers方法

答案 1 :(得分:1)

由于KeyEvent扩展了InputEvent,isControlDownisShiftDownisAltDown

答案 2 :(得分:1)

在处理Swing小部件时,

KeyEvent可能有点低级别。而是通过InputMapActionMap

答案 3 :(得分:0)

显然,只要按键关闭,就会调用按键事件。 它不是一个多键按键事件,并且没有这样的事情,所以没有键码可以解决多个键的问题。

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

在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;
 }