2011-02-17 75 views
1

我有一个内容窗格,其中包含一个JScrollPane,它包裹着一个我正在使用的不可编辑的JTextArea(现在),只是显示有关正在按什么键的信息(正在尝试让这个KeyListener工作)。在背景框架上使用Java KeyListener

KeyListener位于JTextArea上,当选择框架时一切正常。不过,即使选择了另一个窗口,我也希望键盘按键被注册。任何方式来做到这一点?

谢谢。

回答

3

我在过去做过,但我不记得具体如何。我认为它类似于:

KeyEventDispatcher dispatcher = new KeyEventDispatcher() 
{ 
    public boolean dispatchKeyEvent(KeyEvent e) 
    { 
     System.out.println(e.getKeyChar()); 
     return false; 
    } 
}; 

DefaultKeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventDispatcher(dispatcher); 

只需使用您的自定义代码修改SysOut。如果要防止分派事件,则该方法应该返回true而不是false。我还发现可能解决您的问题的this question

+0

我忘了这堂课。感谢您的提醒! 1+ – 2011-02-17 20:26:22

0

使用key bindings进行研究如果您需要在执行聆听的组件没有焦点时侦听密钥。另一方面,如果在另一个应用程序拥有焦点时尝试收听密钥,那么最好的方法是不要使用Java来实现此目的,而是使用一种编程语言,以使您能够更接近操作系统,例如C或C++。