如何添加全局動作事件偵聽器?我試過如何添加全局動作事件偵聽器?
Toolkit.getDefaultToolkit().addAWTEventListener (this, AWTEvent.ACTION_EVENT_MASK);
但它不起作用。
如何添加全局動作事件偵聽器?我試過如何添加全局動作事件偵聽器?
Toolkit.getDefaultToolkit().addAWTEventListener (this, AWTEvent.ACTION_EVENT_MASK);
但它不起作用。
全球聽了操作事件像Jbutton將Swing組件不起作用,因爲它們直接撥打他們的聽衆,而不是派遣事件通過AWT事件隊列。 Java bug 6292132描述了這個問題。
不幸的是,我知道沒有任何解決方法,沒有註冊每個組件的偵聽器。
(例如)來監聽在應用程序的所有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
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