如何检测鼠标移出 Java 弹出窗口?

How to detect mouse moving outside Java Popup?

我正在 Java 中创建以下 UI。

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

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

我希望此面板在用户与面板的组件交互时在屏幕上保持可见,但只要用户鼠标位于弹出窗口边界,我希望弹出窗口隐藏。

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

这里的问题是我可以让弹出窗口出现,但是只要我将鼠标移到面板内,然后移到面板内的组件上方,面板就会触发 mouseExited,弹出窗口就会隐藏:(

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

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

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