JComponent for Ctrl键上的KeyListener
问题描述:
我想在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关键本身按下或释放
答
试试这个:
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_CONTROL) {
//do something
}
}
答
恕我直言使用Key bindings是更加灵活和可靠的方法带来以下好处:
- 将动作本身与击键分开。
- 有不同的条件来触发这些操作:
WHEN_FOCUSED
,WHEN_IN_FOCUSED_WINDOW
,WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
- 我们可以充分利用这些条件优势,附加不同的操作不同的组件依赖于基于优先级的策略(见的例子给出here)。
说了这么多,我们可以创建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
哎呀!过去我曾经使用过这种方法,但只是忘记了。谢谢!那正是我在寻找的。 – radlan 2014-12-05 12:43:02
@radlan'当ctrl键本身被按下或释放时,什么是更好的方法来触发?“问题问到什么是更好的方法。那么更好的方法是使用密钥绑定。 Swing被设计为与键绑定一起使用。 “过去我曾经使用过这样的方法,”现在你知道“更好的方法”,在将来不需要使用这种方法。 – camickr 2014-12-05 15:26:47