您可能正在手动调用setVisible(true)
在菜单上。这可能会导致菜单中出现一些令人讨厌的错误行为。
The show(Component, int x, int x)
方法处理您需要发生的所有事情(在鼠标悬停时突出显示内容并在必要时关闭弹出窗口),其中使用setVisible(true)
仅显示菜单而不添加任何其他行为。
要制作右键单击弹出菜单,只需创建一个JPopupMenu http://java.sun.com/javase/6/docs/api/javax/swing/JPopupMenu.html.
class PopUpDemo extends JPopupMenu {
JMenuItem anItem;
public PopUpDemo() {
anItem = new JMenuItem("Click Me!");
add(anItem);
}
}
然后,您需要做的就是添加自定义MouseListener http://java.sun.com/javase/6/docs/api/java/awt/event/MouseListener.html到您想要弹出菜单的组件。
class PopClickListener extends MouseAdapter {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger())
doPop(e);
}
public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger())
doPop(e);
}
private void doPop(MouseEvent e) {
PopUpDemo menu = new PopUpDemo();
menu.show(e.getComponent(), e.getX(), e.getY());
}
}
// Then on your component(s)
component.addMouseListener(new PopClickListener());
当然,教程里有稍微深入一点 http://docs.oracle.com/javase/tutorial/uiswing/components/menu.html#popup解释。
Note:如果您发现弹出菜单与用户单击的位置相距甚远,请尝试使用e.getXOnScreen()
and e.getYOnScreen()
x 和 y 坐标的方法。