5

我想在我的 JFrame 上收到鼠标事件(特别是鼠标进入和退出事件)的通知。但是当我向它添加鼠标侦听器时,我会在框架的边界上得到事件,而不是在整个框架及其内容。

关于为什么的任何想法?

编辑:或者至少你有其他选择吗?我想要一种“全局”方式来捕捉 JFrame 上的鼠标事件。也许鼠标监听器不是答案。

4

4 回答 4

6

您可以获取所有事件并检查它们的源是否是 JFrame 中的组件。

请参阅Toolkit.addAWTEventListener

于 2009-09-10T23:31:37.650 回答
5

有一个不可见的组件覆盖整个 GUI,即“玻璃窗格”。你可以把你的听众附加到那个上面。例子:

JFrame frame = new JFrame();
Component glassPane = frame.getGlassPane();
glassPane.addMouseListener(myListener);

如果您希望拦截的事件传递到底层组件,您可以重新调度它们。例如:

public void mouseMoved(MouseEvent e) {
    redispatchMouseEvent(e, false);
}
于 2009-09-10T22:42:28.937 回答
2

因为内容(可能是 JPanel )正在“隐藏”并消耗事件并且它们没有到达 JFrame。

您可以做的是为所有孩子添加相同的侦听器。不过应该有更好的方法。

于 2009-09-10T22:38:50.430 回答
2

另一种方法AWTEventListener是推动EventQueue. 这样做的好处是小程序和 WebStart 应用程序可以做到这一点。

于 2009-09-11T00:43:58.473 回答