如何添加全局动作事件侦听器?我试过如何添加全局动作事件侦听器?
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