java swing 按键按下只调用一次

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

界面:
java swing 按键按下只调用一次_第1张图片
 

回车事件处理代码:

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);
		

 
java swing 按键按下只调用一次_第2张图片
 为什么会执行两次呢?因为按键按下事件包含两个事件: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);
		

 

 

 

 

你可能感兴趣的:(java,swing,swing,key,down,按键事件,按下)