在我的Java swing应用程序中,我已经注意到,当我单击JPopupMenu中禁用的JMenuItem时,它会隐藏菜单,但是我不想隐藏它,就好像没有单击任何东西一样。有办法防止这种情况吗?

-----------------------------------> 更新:添加了代码示例:

JMenuItem saveMenuItem = new JMenuItem();

saveMenuItem.setEnabled(false);

saveMenuItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        saveMenuItemActionPerformed();
    }
});
add(saveMenuItem);

private void saveMenuItemActionPerformed() {
    System.out.println( "Save clicked." );
}

最佳答案

这已经过测试并且可以工作。

外观决定如何处理禁用菜单项上的鼠标事件。无论如何,您可以使用自定义MenuItem拦截不需要的事件。只需使用该代码(复制/粘贴):

public class CustomMenuItem extends JMenuItem {

    public CustomMenuItem(String text) {
        super(text);
    }

    public CustomMenuItem() {
        super();
    }

    protected void processMouseEvent(MouseEvent e) {
        if (isEnabled()) super.processMouseEvent(e);
    }
}

首先,修改代码以适合您的需求(可选)。
最后,JMenuItem替换任何CustomMenuItem

而已!

07-24 00:41