2011-10-13 60 views

回答

3

全球听了操作事件像Jbutton将Swing组件不起作用,因为它们直接拨打他们的听众,而不是派遣事件通过AWT事件队列。 Java bug 6292132描述了这个问题。

不幸的是,我知道没有任何解决方法,没有注册每个组件的侦听器。

3

(例如)来监听在应用程序的所有MouseEvents和的KeyEvents你可以使用:

long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK 
    + AWTEvent.MOUSE_EVENT_MASK 
    + AWTEvent.KEY_EVENT_MASK; 

Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() 
{ 
    public void eventDispatched(AWTEvent e) 
    { 
     System.out.println(e.getID()); 
    } 
}, eventMask); 

因为这些代码在事件指派执行线程,你将需要确保其迅速执行,以防止GUI不起作用。如果您想查看一个工作示例,则使用上述方法 here

在这里看到更多的信息:Global Event listeners

这对于thourough研究:AWT Event Listener

0

java swing中有Global Event Dispatcher,您可以使用它。它的基本功能是拦截事件,执行自定义逻辑并将其分派给实际组件。例如,如果你想拦截鼠标点击事件 -

EventQueue eventQueue = java.awt.Toolkit.getDefaultToolkit().getSystemEventQueue(); 
    eventQueue.push(new EventQueue() 
    { 
     @Override 
     public void dispatchEvent(java.awt.AWTEvent awtEvent) 
     { 
      if((awtEvent instanceof MouseEvent && awtEvent.getID() == MouseEvent.MOUSE_CLICKED) 
      { 
       // do your custom logic here 
      } 
     } 
    super.dispatchEvent(awtEvent); 
    }); 

你可以找到关于此位置的详细信息 - Event Dispatchers