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



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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值