5

在注册在 JButton 后面的 KeyListenerF1和 ie CTRL+F1各自的SHIFT- CTRL+之间分开的正确方法是什么?F1

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

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

.. 总是给我 112 F1, 113F2等等。我知道我可以自己处理 keyPressed() 来处理 keyReleased for CTRL// SHIFT/ALT等,但我希望有更好的方法。

非常感谢!!!

4

4 回答 4

4

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

  1. 使用 isAltDown、isControlDown、isShiftDown 方法或
  2. 使用 getModifiers 方法
于 2008-12-30T18:13:57.843 回答
1

由于 KeyEvent 扩展了 InputEvent、isControlDownisShiftDownisAltDown

于 2008-12-30T18:16:04.767 回答
1

KeyEvents 在处理 Swing 小部件时可能有点低级。而是通过InputMapand ActionMap

于 2008-12-30T19:26:40.193 回答
0

显然,只要按键按下,就会调用按键按下事件。它不是一个多键按下事件,也没有这样的事情,所以没有多键按下的键码。

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

在 pusdo 代码中:

// CRTLKeyCode是 ctrl 键的代码
私人布尔 ctrlPressed = false;

 onKeyDown(KeyEvent 事件){
     int key = event.getKeyCode();
     如果(键 == CRTLKeyCode)
        ctrlPressed =真;
     否则 if(ctrlPressed && key == 112)
        //执行你的动作
 }
 onKeyUp(KeyEvent 事件){
     int key = event.getKeyCode();
     如果(键 == CRTLKeyCode)
        ctrlPressed = 假;
 }
于 2008-12-30T18:22:44.863 回答