【发布时间】:2016-04-15 17:29:12
【问题描述】:
我有一个页面,上面有对象。对象位置由Rectangle2D.Double 定义。当我移动鼠标时,我检查矩形是否包含鼠标点。
如果是,我想显示对象的悬停菜单(到目前为止只有文本)。
我在构造函数中拥有的是这个
annnotationPopupMenu = new JPopupMenu();
annotationTextArea = new JTextArea(5,20);
annotationTextArea.setLineWrap(true);
annnotationPopupMenu.add(annotationTextArea);
如果我超过了一个对象,我会运行它
annotationTextArea.setText(annotation.getContent());
annnotationPopupMenu.setLocation(MouseInfo.getPointerInfo().getLocation().x+30, MouseInfo.getPointerInfo().getLocation().y);
annnotationPopupMenu.setVisible(true);
如果我离开对象
annnotationPopupMenu.setVisible(false);
正在运行。我现在遇到的问题是,当我退出应用程序并且鼠标悬停在一个对象上时,JPopupMenu 仍然可见,即使应用程序的其余部分现在位于我选择的窗口后面。
我需要怎么做才能使 JPopup 菜单不可见或至少不优先于我选择的窗口。
在一个 MWE 下方,它只打开一个 PopupMenu,即使 alt-tabbing 也保持在顶部:
package popupmenutest;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
public class PopupMenuTest
{
public static void main(String[] args)
{
JPopupMenu annotationPopupMenu = new JPopupMenu();
JTextArea annotationTextArea = new JTextArea(5,20);
annotationTextArea.setLineWrap(true);
annotationPopupMenu.setLocation(500, 400);
annotationPopupMenu.add(annotationTextArea);
annotationPopupMenu.setVisible(true);
}
}
【问题讨论】:
-
请编辑您的问题以包含一个minimal reproducible example,该minimal reproducible example显示您描述的问题并确定受影响的平台。
-
你在使用
setComponentPopupMenu(),对于example。 -
您是否考虑过使用预先存在的工具提示功能?
-
但是我想调用'Tooltip'的对象不是swing对象,它是一个带有矩形和一些其他非swing相关成员的类。如何在任意对象上使用工具提示功能?