【发布时间】:2015-01-15 14:29:46
【问题描述】:
我有一个带有文本字段、表格和两个按钮的框架!
我想添加一个 KeyListener 以在按下和释放修改键时进行监听,以更改 Ok 按钮的文本并让用户选择不同的方法。无论哪个组件处于焦点,侦听器都应该工作。
例如:
- 没有修饰符:“Ok” - 做某事;
- 按下 Shift 键:“确定并关闭” - 做某事并关闭框架;
- Alt 键按下...等
现在我找到了这个解决方案,但它看起来有点笨拙,一点也不优雅。
公共类 MyFrame 扩展 JFrame {
private boolean shiftPressed;
private MyDispatcher keyDispatcher;
public MyFrame () {
super();
initGUI();
shiftPressed = false;
KeyboardFocusManager currentManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
keyDispatcher = new MyDispatcher();
currentManager.addKeyEventDispatcher(keyDispatcher);
//...remain of code
}
@Override
public void dispose() {
// I remove the dispatcher when the frame is closed;
KeyboardFocusManager currentManager = KeyboardFocusManager
.getCurrentKeyboardFocusManager();
currentManager.removeKeyEventDispatcher(keyDispatcher);
super.dispose();
}
private class MyDispatcher implements KeyEventDispatcher {
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getModifiers() == KeyEvent.SHIFT_MASK) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
System.out.println("Shift Pressed");
shiftPressed = true;
btnOk.setText("Ok and Close");
}
} else if (e.getID() == KeyEvent.KEY_RELEASED) {
if(!e.isShiftDown() && shiftPressed) {
System.out.println("Shift Released");
btnOk.setText("Ok");
}
}
return false;
}
}
}
对如何改进代码有什么建议吗?
【问题讨论】:
-
对于 Swing,我们通常使用key bindings 而不是较低级别的
KeyListener。
标签: java swing keylistener