我有一个包含大量不断变化的子组件(多层)的JFrame。有没有一种方法可以添加监听所有鼠标事件的方式?类似于KeyEventDispatcher?
使用AWTEventListener来过滤鼠标事件:
long eventMask = AWTEvent.MOUSE_MOTION_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK;
Toolkit.getDefaultToolkit().addAWTEventListener( new AWTEventListener()
{
public void eventDispatched(AWTEvent e)
{
System.out.println(e);
}
}, eventMask);
[3]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#getDeepestComponentAt(java.awt.Component,整数,整数) [4]: http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/SwingUtilities.html#convertMouseEvent(java.awt.Component,java.awt.event.MouseEvent,java.awt.Component)
您需要使用JFrame的glassPane:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html#getGlassPane()
只需使用frm.getGlassPane()获取JFrame的玻璃板,然后在其上使用addMouseListener()来捕获窗口内的所有鼠标事件。
将所有与鼠标相关的监听器实现在一个类中,并将该类注册为所有鼠标相关事件的处理程序
与鼠标相关的接口包括:
MouseListener MouseMotionListener MouseWheelListener
你可能想要实现MouseAdapter
的子类,这是一个抽象类,提供了所有在Mouse*Listener
接口中定义的方法的空实现。一旦你这样做了,当你创建子组件时,你可以将它注册为MouseListener
。当你指示你的组件正在“改变”时,你需要确保在你的JFrame的生命周期内释放你的组件时也取消注册你的监听器。