我希望 Swing 中的 JComponent 上有一个 KeyListener,它可以在按下和释放 ctrl 键时使用react。 这是一个幼稚但次优的解决方案(它对每次按键都有反应,而不仅仅是在按下/释放 ctrl 键时:
new KeyAdapater() {
public void keyPressed(KeyEvent e) {
if (e.isControlDown()) {
//do something
}
}
public void keyReleased(KeyEvent e) {
if (!e.isControlDown()) {
//do something other
}
}
}
只有在按下或释放 ctrl 键本身时才触发的更好方法是什么?
最佳答案
恕我直言,使用 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
是一个标志,指示击键代表按键释放事件。请参阅the API了解更多详情。
另请参阅此主题:Key bindings vs. key listeners in Java ,和How to Use Key Bindings教程
关于java - JComponent 上用于 Ctrl 键的 KeyListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27315957/