我想在我的 JFrame 上收到鼠标事件(特别是鼠标进入和退出事件)的通知。但是当我向它添加鼠标侦听器时,我会在框架的边界上得到事件,而不是在整个框架及其内容。
关于为什么的任何想法?
编辑:或者至少你有其他选择吗?我想要一种“全局”方式来捕捉 JFrame 上的鼠标事件。也许鼠标监听器不是答案。
我想在我的 JFrame 上收到鼠标事件(特别是鼠标进入和退出事件)的通知。但是当我向它添加鼠标侦听器时,我会在框架的边界上得到事件,而不是在整个框架及其内容。
关于为什么的任何想法?
编辑:或者至少你有其他选择吗?我想要一种“全局”方式来捕捉 JFrame 上的鼠标事件。也许鼠标监听器不是答案。
您可以获取所有事件并检查它们的源是否是 JFrame 中的组件。
有一个不可见的组件覆盖整个 GUI,即“玻璃窗格”。你可以把你的听众附加到那个上面。例子:
JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);
如果您希望拦截的事件传递到底层组件,您可以重新调度它们。例如:
public void mouseMoved(MouseEvent e) {
redispatchMouseEvent(e, false);
}
因为内容(可能是 JPanel )正在“隐藏”并消耗事件并且它们没有到达 JFrame。
您可以做的是为所有孩子添加相同的侦听器。不过应该有更好的方法。
另一种方法AWTEventListener
是推动EventQueue
. 这样做的好处是小程序和 WebStart 应用程序可以做到这一点。