2014-12-05 36 views
0

我想在Swing中的JComponent上有一个KeyListener,它在按下并释放ctrl键时发生反应。 这是一个天真,但次优解(它反应在每一个按键时,CTRL不仅在按下/释放键:JComponent for Ctrl键上的KeyListener

new KeyAdapater() { 
    public void keyPressed(KeyEvent e) { 
    if (e.isControlDown()) { 
     //do something 
    } 
    } 
    public void keyReleased(KeyEvent e) { 
    if (!e.isControlDown()) { 
     //do something other 
    } 
    } 
} 

什么是只触发一个更好的办法,当CTRL关键本身按下或释放

回答

2

试试这个:

public void keyPressed(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.VK_CONTROL) { 
     //do something 
    } 
} 
+0

哎呀!过去我曾经使用过这种方法,但只是忘记了。谢谢!那正是我在寻找的。 – radlan 2014-12-05 12:43:02

+1

@radlan'当ctrl键本身被按下或释放时,什么是更好的方法来触发?“问题问到什么是更好的方法。那么更好的方法是使用密钥绑定。 Swing被设计为与键绑定一起使用。 “过去我曾经使用过这样的方法,”现在你知道“更好的方法”,在将来不需要使用这种方法。 – camickr 2014-12-05 15:26:47

4

恕我直言使用Key bindings是更加灵活和可靠的方法带来以下好处:

说了这么多,我们可以创建KeyStrokes喜欢如下:

KeyStroke controlKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, 0); 

我们甚至可以指定击键将在一个键释放事件触发:

KeyStroke controlReleasedKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_CONTROL, 0, true); 

注意:0表示没有修饰符,true是一个标志,指示th按键描边代表一个关键的发布事件。有关更多详细信息,请参阅the API

也请参见本主题:Key bindings vs. key listeners in Java,并How to Use Key Bindings教程

+0

谢谢,我也会考虑这个。 – radlan 2014-12-05 12:47:15

相关问题