2011-10-13 133 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