java swing 按键按下只调用一次

本文介绍了一种使用Java Swing开发的密码管理系统中遇到的问题:登录界面的回车事件触发了两次。通过调整代码逻辑,仅在按下回车键时触发一次事件,解决了该问题。

我使用Java swing做了一个密码管理系统,并且在登录界面增加了回车事件,但是每次回车时会触发两次。

界面:

 

回车事件处理代码:

Java代码   收藏代码
  1. Toolkit toolkit = Toolkit.getDefaultToolkit();  
  2.         // 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.  
  3.         toolkit.addAWTEventListener(  
  4.                 new java.awt.event.AWTEventListener() {  
  5.                     public void eventDispatched(AWTEvent event) {  
  6.                         if (event.getClass() == KeyEvent.class) {  
  7.                             KeyEvent kE = ((KeyEvent) event);  
  8.                             // 处理按键事件 Ctrl+Enter  
  9.                             if ((kE.getKeyCode() == KeyEvent.VK_ENTER)  
  10.                                     ) {  
  11.   
  12. //                              window.refreshAction();  
  13.                                 System.out.println("enter");  
  14.                             }   
  15.                         }  
  16.                     }  
  17.             }, java.awt.AWTEvent.KEY_EVENT_MASK);  
  18.           

 

 为什么会执行两次呢?因为按键按下事件包含两个事件:key down,key press

如何只触发一次呢?

增加如下代码:

&&( kE.getID() == KeyEvent.KEY_PRESSED)

 

完整代码如下:

Java代码   收藏代码
  1. Toolkit toolkit = Toolkit.getDefaultToolkit();  
  2.         // 注册应用程序全局键盘事件, 所有的键盘事件都会被此事件监听器处理.  
  3.         toolkit.addAWTEventListener(  
  4.                 new java.awt.event.AWTEventListener() {  
  5.                     public void eventDispatched(AWTEvent event) {  
  6.                         if (event.getClass() == KeyEvent.class) {  
  7.                             KeyEvent kE = ((KeyEvent) event);  
  8.                             // 处理按键事件 Ctrl+Enter  
  9.                             if ((kE.getKeyCode() == KeyEvent.VK_ENTER)&&( kE.getID() == KeyEvent.KEY_PRESSED)  
  10.                                     ) {  
  11.   
  12. //                              window.refreshAction();  
  13.                                 System.out.println("enter");  
  14.                             }   
  15.                         }  
  16.                     }  
  17.             }, java.awt.AWTEvent.KEY_EVENT_MASK);  
  18.           

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值