2008-12-30 59 views
5

什么是F1和CTRL F1 SHIFT之间即 + 各自分离的正确方法 - 背后即一个JButton注册的KeyListener的内CTRL F1 + 的Java:处理合并键盘输入

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

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

..总是给我112 F1,113 F2等。我明白,我可以通过采取的keyPressed()为各自的的keyReleased小心处理它CTRL/SHIFT/ALT /等我自己,但我希望有一个更好的办法。

很多很多感谢!

+0

@ThomasAbraham请停止关注单个编辑任务 - 这个问题还有很多可以做的事情(标题中的标签,最后感谢关键字可能会突出显示),任何编辑都应该试图修复它的所有*,而不仅仅是一件事。 =) – 2013-01-15 08:10:52

回答

4

解决办法在于KeyEvent的(InputEvent的)的父

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

非常感谢,那正是我一直在寻找的! – MrG 2008-12-30 18:20:44

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; 
} 
+0

非常感谢,但我认为按照Midhat/bcash的建议,使用isXxxDown()根据需要获取状态要容易得多,以便自行管理状态。 – MrG 2009-01-01 11:02:09

1

KeyEvent s的一个Swing控件打交道时,可能是有点低的水平。相反,请通过InputMapActionMap