2012-02-16 68 views
2

是否有任何解决方案对应于该主题的问题。如果我按例如Windows键+空格,我得到:“Windows键”+“其他键” - Java不检测“其他键”

的keyTyped:WINDOWS

我想这应该是:

的keyTyped:WINDOWS
的keyTyped:空间
的keyReleased:WINDOWS
keyReleased:Space

我的代码:

 <Java component>.addKeyListener(new KeyListener() { 

     @Override 
     public void keyTyped(KeyEvent e) { 
      e.consume(); 
     } 

     @Override 
     public void keyPressed(KeyEvent e) { 
      System.out.println("keyTyped: " + KeyEvent.getKeyText(e.getKeyCode())); 
      e.consume(); 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      System.out.println("keyReleased: " + KeyEvent.getKeyText(e.getKeyCode())); 
      e.consume(); 
     } 
    }); 

谢谢!

回答

4

WINDOWS + Space是Windows系统的有效全局热键,因此不通知你的程序(而且永远不会。)检测到第一个行程,因为WINDOWS键不是热键(且仅展现在释放后开始菜单)。这也是你没有获得发行版的原因。

我不知道如果Java允许系统范围的钩子,但你可能不得不与JNI混淆,我认为你不想处理。

+0

我认识JNA。但是,我不能写任何与事件/钩子相关的工作代码。 – peter 2012-02-16 15:08:48