我使用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);