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


java swing增加全局快捷键
 

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

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

代码如下:

Java代码  java swing增加全局快捷键
  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


java swing增加全局快捷键
 这样保证按一次键盘,只触发一次事件

相关文章: