2012-04-14 27 views
0

我打算做一个隐藏的对话框中我的应用程序获得可见与键盘组合(例如五序贯按Ctrl ++i)。
如何在整个应用程序中全局捕获键盘组合笔划?对整个应用程序在全球捕获键盘的组合,以显示隐藏的JDialog在Java中

由于

+1

你知道,很多键盘会呛更多比同时按下两个修饰键,对吗? – thkala 2012-04-14 16:47:57

+0

@thkala:不,我不知道!我从来没有见过这样的情况!但修饰符的数量对我来说并不重要!我只需要一个连续次数按下的组合(即使五个Ctrl + a也可以接受!) – RYN 2012-04-14 17:01:39

回答

1

我解决它通过定义DispatcherListener

class DispatcherListener implements KeyEventDispatcher{ 
    private int level=0; 

    public boolean dispatchKeyEvent(KeyEvent e) { 
     if(e.getID() == KeyEvent.KEY_RELEASED){ 
      if(e.isControlDown() && e.isShiftDown()){ 
       if(this.level==0 && e.getKeyCode()==KeyEvent.VK_S){ 
        level++; 
       }else if(this.level==1 && e.getKeyCode()==KeyEvent.VK_H){ 
        level++; 
       }else if(this.level==2 && e.getKeyCode()==KeyEvent.VK_O){ 
        level++; 
       }else if(this.level==3 && e.getKeyCode()==KeyEvent.VK_W){ 
        level=0; 
        this.showHiddenWindow((JFrame)SwingUtilities.getRoot(e.getComponent())); 
       }else{ 
        level=0; 
       } 

       //System.out.println("level: " + level); 
      } 
     } 
     return false; 
    } 

,并用它作为这样的:

KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); 
    manager.addKeyEventDispatcher(new DispatcherListener()); 

谢谢大家

2
FullScreenTest

是示出如何将在此上下文中使用ActionKey Bindings一个例子。您可以用KeyEvent.VK_I和相关的KeyStroke修饰符替代。你的动作监听器可以保持它被触发的次数。

相关问题