【发布时间】:2009-09-10 22:35:40
【问题描述】:
我希望在我的 JFrame 上收到有关鼠标事件(特别是鼠标进入和退出事件)的通知。但是当我向它添加鼠标侦听器时,我会在框架的边界上获得事件,而不是在整个框架及其内容。
有什么想法吗?
编辑:或者至少你有其他选择吗?我想要一种“全局”方式来捕捉 JFrame 上的鼠标事件。也许鼠标监听器不是答案。
【问题讨论】:
标签: java swing events mouseevent jframe
我希望在我的 JFrame 上收到有关鼠标事件(特别是鼠标进入和退出事件)的通知。但是当我向它添加鼠标侦听器时,我会在框架的边界上获得事件,而不是在整个框架及其内容。
有什么想法吗?
编辑:或者至少你有其他选择吗?我想要一种“全局”方式来捕捉 JFrame 上的鼠标事件。也许鼠标监听器不是答案。
【问题讨论】:
标签: java swing events mouseevent 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 应用程序可以做到这一点。
【讨论】: