`

java swing增加全局快捷键

阅读更多

最近在改进密码管理系统,



 

突然想到可以为它增加全局快捷键,比如:

Ctrl+Enter,触发【refresh】按钮,按【Page Up】、【Page Down】进行翻页,按【Home】跳转到第一页;按【End】跳转到最后一页。

代码如下:

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)
												&& (((InputEvent) event)
														.isControlDown())) {

											window.refreshAction();
										} /* page down */else if (kE.getKeyCode() == KeyEvent.VK_PAGE_DOWN
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											window.nextPageAction();
											// System.out.println("page down:"
											// + kE.getID());

										} /* page up */else if (kE.getKeyCode() == KeyEvent.VK_PAGE_UP
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											window.previousPageAction();
											// System.out.println("page down:"
											// + kE.getID());

										}/* Ctrl +K */else if (kE.getKeyCode() == KeyEvent.VK_K
												&& kE.isControlDown()
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											System.out.println("Ctrl +K");
											window.getSearchTF().requestFocus();
										}
										/* home */else if (kE.getKeyCode() == KeyEvent.VK_HOME
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											System.out.println("home");
											window.firstPageAction();
										}
										/* end */else if (kE.getKeyCode() == KeyEvent.VK_END
												&& kE.getID() == KeyEvent.KEY_PRESSED) {
											System.out.println("end");
											window.lastPageAction();
										}
									}
								}
							}, java.awt.AWTEvent.KEY_EVENT_MASK);

 

其间遇到一个棘手的问题,就是我按【Page Down】时,触发了两次,如果当前页数为1,按一次【Page Down】,当前页数就变成了3,因为触发了两次。

为什么会这样呢?

因为键盘按下的时候触发了两种事件:KEY_PRESSED KEY_RELEASED

解决方法:

在if条件中增加:kE.getID() == KeyEvent.KEY_PRESSED



 这样保证按一次键盘,只触发一次事件

  • 大小: 25.5 KB
  • 大小: 110.1 KB
1
1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics