java swing增加全局快捷键

简介:

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



 

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

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

代码如下:

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.                                                 && (((InputEvent) event)  
  11.                                                         .isControlDown())) {  
  12.   
  13.                                             window.refreshAction();  
  14.                                         } /* page down */else if (kE.getKeyCode() == KeyEvent.VK_PAGE_DOWN  
  15.                                                 && kE.getID() == KeyEvent.KEY_PRESSED) {  
  16.                                             window.nextPageAction();  
  17.                                             // System.out.println("page down:"  
  18.                                             // + kE.getID());  
  19.   
  20.                                         } /* page up */else if (kE.getKeyCode() == KeyEvent.VK_PAGE_UP  
  21.                                                 && kE.getID() == KeyEvent.KEY_PRESSED) {  
  22.                                             window.previousPageAction();  
  23.                                             // System.out.println("page down:"  
  24.                                             // + kE.getID());  
  25.   
  26.                                         }/* Ctrl +K */else if (kE.getKeyCode() == KeyEvent.VK_K  
  27.                                                 && kE.isControlDown()  
  28.                                                 && kE.getID() == KeyEvent.KEY_PRESSED) {  
  29.                                             System.out.println("Ctrl +K");  
  30.                                             window.getSearchTF().requestFocus();  
  31.                                         }  
  32.                                         /* home */else if (kE.getKeyCode() == KeyEvent.VK_HOME  
  33.                                                 && kE.getID() == KeyEvent.KEY_PRESSED) {  
  34.                                             System.out.println("home");  
  35.                                             window.firstPageAction();  
  36.                                         }  
  37.                                         /* end */else if (kE.getKeyCode() == KeyEvent.VK_END  
  38.                                                 && kE.getID() == KeyEvent.KEY_PRESSED) {  
  39.                                             System.out.println("end");  
  40.                                             window.lastPageAction();  
  41.                                         }  
  42.                                     }  
  43.                                 }  
  44.                             }, java.awt.AWTEvent.KEY_EVENT_MASK);  

 

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

为什么会这样呢?

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

解决方法:

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



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

相关文章
|
6天前
|
存储 Java 关系型数据库
农产品管理系统【GUI/Swing+MySQL】(Java课设)
农产品管理系统【GUI/Swing+MySQL】(Java课设)
20 1
|
6天前
|
存储 Java 关系型数据库
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
个人成绩信息管理系统【GUI/Swing+MySQL】(Java课设)
22 0
|
6天前
|
存储 Java 关系型数据库
酒店管理系统【GUI/Swing+MySQL】(Java课设)
酒店管理系统【GUI/Swing+MySQL】(Java课设)
25 1
|
6天前
|
存储 Java 关系型数据库
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
社区医院管理服务系统【GUI/Swing+MySQL】(Java课设)
31 1
|
6天前
|
存储 Java 关系型数据库
仓库管理系统【GUI/Swing+MySQL】(Java课设)
仓库管理系统【GUI/Swing+MySQL】(Java课设)
22 0
|
6天前
|
存储 Java 关系型数据库
游乐场管理系统【GUI/Swing+MySQL】(Java课设)
游乐场管理系统【GUI/Swing+MySQL】(Java课设)
19 0
|
6天前
|
存储 Java 关系型数据库
影碟出租管理系统【GUI/Swing+MySQL】(Java课设)
影碟出租管理系统【GUI/Swing+MySQL】(Java课设)
19 0
|
6天前
|
存储 Java 关系型数据库
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
实验室设备管理系统【GUI/Swing+MySQL】(Java课设)
21 0
|
6天前
|
存储 Java 关系型数据库
请销假管理系统【GUI/Swing+MySQL】(Java课设)
请销假管理系统【GUI/Swing+MySQL】(Java课设)
20 0
|
6天前
|
Java 关系型数据库 MySQL
基于swing的java物业管理系统
基于swing的java物业管理系统
23 5