如何添加全局事件监听器?我已经尝试过:
Toolkit.getDefaultToolkit ().addAWTEventListener (this, AWTEvent.ACTION_EVENT_MASK);
但是它没有起作用。
如果您想在应用程序中监听所有的鼠标和键盘事件,可以使用以下代码:
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变得无响应。如果您想查看一个可工作的示例,请参考此处所使用的方法。
更多信息请参见:全局事件监听器
这里还有一份详尽的研究资料:AWT事件监听器
在Java Swing中有全局事件分发器,您可以使用它。它的基本作用是拦截事件,执行自定义逻辑并将其分派到实际组件。例如,如果您希望拦截鼠标单击事件-
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);
});