您可能正在手动调用
setVisible(true)菜单。这会导致菜单中出现一些令人讨厌的越野车行为。
该
show(Component, int x, intx)方法处理所有需要发生的事情(在鼠标悬停时突出显示事情,并在必要时关闭弹出窗口),其中使用
setVisible(true)只是显示菜单而无需添加任何其他行为。
要进行右键单击弹出菜单,只需创建一个
JPopupMenu。
class PopUpDemo extends JPopupMenu { JMenuItem anItem; public PopUpDemo() { anItem = new JMenuItem("Click Me!"); add(anItem); }}然后,您所要做的就是向
MouseListener要弹出菜单的组件中添加一个自定义项。
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());当然,这些教程会有更深入的解释。
注意:
如果您发现弹出菜单与用户单击的位置相距很远,请尝试对x和y坐标使用
e.getXonScreen()和
e.getYonScreen()方法。



