我有一个包含对象的页面。对象位置由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);
}
}
答案 0 :(得分:0)
我通过将顶部框架添加到WindowFocusListener
然后再添加到windowLostFocus
来修复此问题。我调用特定窗格并将JPopupMenu的可见性设置为false。
这样的事情:
package popupmenutest;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JFrame;
import java.awt.Dimension;
import java.awt.MouseInfo;
import java.awt.event.WindowEvent;
import java.awt.event.WindowFocusListener;
public class PopupMenuTest implements WindowFocusListener
{
public PopupMenuTest()
{
frame = new JFrame();
frame.setSize(800, 600);
popupMenu = new JPopupMenu();
JTextArea annotationTextArea = new JTextArea(5,20);
JScrollPane scrollPane = new JScrollPane(annotationTextArea);
popupMenu.setPreferredSize(new Dimension(300, 120));
annotationTextArea.setText("Dies hier ist ein Blindtext zum Testen von Textausgaben. Wer diesen Text liest, ist selbst schuld. Der Text gibt lediglich den Grauwert der Schrift an. Ist das wirklich so? "
+ " Ist es gleichgültig, ob ich schreibe: Dies ist ein Blindtext oder Huardest gefburn? Kjift – mitnichten! Ein Blindtext bietet mir wichtige Informationen. An ihm messe ich die Lesbarkeit einer Schrift, "
+ "ihre Anmutung, wie harmonisch ");
annotationTextArea.setLineWrap(true);
annotationTextArea.setWrapStyleWord(true);
annotationTextArea.invalidate();
scrollPane.setVisible(true);
popupMenu.setLocation(MouseInfo.getPointerInfo().getLocation().x, MouseInfo.getPointerInfo().getLocation().y);
popupMenu.add(scrollPane);
popupMenu.pack();
frame.add(popupMenu);
frame.addWindowFocusListener(this);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void windowGainedFocus(WindowEvent e)
{
}
@Override
public void windowLostFocus(WindowEvent e)
{
popupMenu.setVisible(false);
}
private JPopupMenu popupMenu;
private JFrame frame;
}