如何检测鼠标在 Java Popup 之外移动?

Posted

技术标签:

【中文标题】如何检测鼠标在 Java Popup 之外移动?【英文标题】:How to detect mouse moving outside Java Popup? 【发布时间】:2016-03-15 08:33:06 【问题描述】:

我正在用 Java 创建以下 UI。

当用户将鼠标悬停在屏幕上的特定区域上时,会出现一个弹出窗口,其中包含一堆按钮和控件。

PopupFactory factory = PopupFactory.getSharedInstance();
_hoverPanel = factory.getPopup( parent, panel, x, y );
_hoverPanel.show();

当用户与面板的组件交互时,我希望此面板在屏幕上保持可见,但一旦用户鼠标存在弹出框,我希望弹出框隐藏。

我尝试在弹出窗口内的面板中添加鼠标侦听器,但我注意到 mouseEntered 仅在我进入面板时触发(而不是在我输入面板内的组件时),而 mouseExited 仅在我退出面板时触发。

这里的问题是我可以让弹出窗口出现,但是一旦我将鼠标移到面板内,然后移到面板内的组件顶部,则 mouseExited 会为面板触发,并且弹出窗口会隐藏:(

我还可以在组件顶部的面板内快速移动鼠标,并且 mouseEntered 永远不会为面板触发:(

如何检测鼠标何时进入弹出式面板内外?

【问题讨论】:

【参考方案1】:

我遇到了类似的问题(当鼠标悬停在我的对话框上时捕获所有鼠标事件),我通过将对话框的根窗格包装在 JLayer (javax.swing.JLayer) 中来解决它,如 http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html#events

【讨论】:

以上是关于如何检测鼠标在 Java Popup 之外移动?的主要内容,如果未能解决你的问题,请参考以下文章

关于wpf中popup跟随鼠标移动显示

QML Popup:知道它是如何关闭的

如何检测相机上的运动以移动鼠标

Java - 检测鼠标是不是在屏幕上的任何位置按下

检测鼠标是不是在多个元素之外

如何在按钮按下事件之外在 Silverlight 中获取鼠标按钮状态?