我使用java swing做了一个密码管理系统,并且在登录界面增加了回车事件,但是每次回车时会触发两次。
界面:
回车事件处理代码:
Toolkit toolkit = Toolkit.getDefaultToolkit();
// 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.
toolkit.addAWTEventListener(
new java.awt.event.AWTEventListener() {
public void eventDispatched(AWTEvent event) {
if (event.getClass() == KeyEvent.class) {
KeyEvent kE = ((KeyEvent) event);
// 处理按键事件 Ctrl+Enter
if ((kE.getKeyCode() == KeyEvent.VK_ENTER)
) {
// window.refreshAction();
System.out.println("enter");
}
}
}
}, java.awt.AWTEvent.KEY_EVENT_MASK);
为什么会执行两次呢?因为按键按下事件包含两个事件:key down,key press
如何只触发一次呢?
增加如下代码:
&&( kE.getID() == KeyEvent.KEY_PRESSED)
完整代码如下:
Toolkit toolkit = Toolkit.getDefaultToolkit();
// 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.
toolkit.addAWTEventListener(
new java.awt.event.AWTEventListener() {
public void eventDispatched(AWTEvent event) {
if (event.getClass() == KeyEvent.class) {
KeyEvent kE = ((KeyEvent) event);
// 处理按键事件 Ctrl+Enter
if ((kE.getKeyCode() == KeyEvent.VK_ENTER)&&( kE.getID() == KeyEvent.KEY_PRESSED)
) {
// window.refreshAction();
System.out.println("enter");
}
}
}
}, java.awt.AWTEvent.KEY_EVENT_MASK);