如何在Java Swing中创建右键单击上下文菜单?
2022-08-31 09:15:51
我目前正在创建一个右键单击上下文菜单,方法是在右键单击时实例化一个新的菜单,并将其位置设置为鼠标位置的位置...有没有更好的方法?JMenu
我目前正在创建一个右键单击上下文菜单,方法是在右键单击时实例化一个新的菜单,并将其位置设置为鼠标位置的位置...有没有更好的方法?JMenu
您可能正在手动调用菜单上的呼叫。这可能会导致菜单中出现一些令人讨厌的错误行为。setVisible(true)
该方法处理您需要发生的所有事情(在鼠标悬停时突出显示内容并在必要时关闭弹出窗口),其中 use 仅显示菜单而不添加任何其他行为。show(Component, int x, int x)
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 坐标使用 and 方法。e.getXOnScreen()
e.getYOnScreen()
这个问题有点旧 - 答案(以及教程)也是如此
在 Swing 中设置弹出菜单的当前 API 是
myComponent.setComponentPopupMenu(myPopupMenu);
这样,鼠标和键盘触发器(后者取决于LAF),它将自动显示。此外,它还支持在容器的子级中重用相同的弹出窗口。要启用该功能,请执行以下操作:
myChild.setInheritsPopupMenu(true);