如何在 Java Swing 中创建右键单击上下文菜单?

2024-05-06

我目前正在通过实例化一个新的来创建右键单击上下文菜单JMenu右键单击并将其位置设置为鼠标的位置...有更好的方法吗?


您可能正在手动调用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 坐标的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java Swing 中创建右键单击上下文菜单? 的相关文章

随机推荐