Java 单击禁用的项目时如何触发操作?

Java 单击禁用的项目时如何触发操作?,java,swing,mouselistener,jmenuitem,disabled-control,Java,Swing,Mouselistener,Jmenuitem,Disabled Control,我在谷歌上搜索了一下,但所有的例子都是针对启用了JMenuItem的情况 我想做的是,我希望在单击时禁用我的JMenuItem(因为权限有限),以显示一个弹出框,请求用户升级,以便他们可以访问所述JMenuItem 以下是我目前拥有的精简版本,命令行上没有打印任何内容: public class ExportMenuItem extends JMenuItem { public ExportMenuItem() { super("Menu Item Name");

我在谷歌上搜索了一下,但所有的例子都是针对启用了
JMenuItem
的情况

我想做的是,我希望在单击时禁用我的
JMenuItem
(因为权限有限),以显示一个弹出框,请求用户升级,以便他们可以访问所述
JMenuItem

以下是我目前拥有的精简版本,命令行上没有打印任何内容:

public class ExportMenuItem extends JMenuItem
{
    public ExportMenuItem()
    {
        super("Menu Item Name");

        addMouseListener(new MouseAdapter()
            {
                @Override
                public void mouseClicked(MouseEvent mouseEvent)
                {
                    if (!isEnabled())
                    {
                        JOptionPane.showMessageDialog(editor.getFrame(), "Hello world.");
                        System.out.println("Sys print hello.");
                    }
                    System.out.println("Sys print hello outside.");
                }
            });
    }
}

这就是你要找的吗

import javax.swing.*;
import java.awt.event.*;

public class ExportMenuItem extends JMenuItem{

    public ExportMenuItem(){
        super("menu item");

        addMouseListener(new MouseListener(){
                @Override
                public void mouseClicked(MouseEvent mouseEvent){
                    if (!isEnabled())                    {
                        JOptionPane.showMessageDialog(null, "Upgrade me!");
                    }//end of if
                }//end of mouseClicked
                public void mouseExited(MouseEvent mouseEvent){}
                public void mouseEntered(MouseEvent mouseEvent){}
                public void mouseReleased(MouseEvent mouseEvent){}
                public void mousePressed(MouseEvent mouseEvent){}

                // And the remaining methods to implement...
            });//end of anonymous class
    }//end of constructor

    public static void main(String[] a){
        JFrame f = new JFrame();
        JMenu menu = new JMenu("menu");
        JMenuBar menuBar  = new JMenuBar();
        f.setJMenuBar(menuBar);
        f.setSize(300, 300);
        f.setVisible(true);
        menuBar.add(menu);
        JMenuItem item = new ExportMenuItem();
        menu.add(item);
        item.setEnabled(false);
    }//end of main
}//end of class

可能是一种完全不同的方法,对用户来说更符合逻辑:

在菜单项后面放置描述文字:

private void addRestartHint(JMenuItem m, String text) {
    final String spaceholder = "                                        ";
    String t = m.getText() + spaceholder;
    m.setLayout(new BorderLayout());
    m.setText(t);
    m.add(new JLabel(text), BorderLayout.EAST);
}

是否为禁用的菜单项显示工具提示?为了更快地获得更好的帮助,发布一个(最小的完整和可验证的示例)。代码对我来说运行得很好。
//其余实现…
的方法使用
MouseAdapter
。我还创建了一个
JMenuItem
,即使它被禁用,它也会对鼠标单击做出同样的响应。您应该创建一个显示它不工作的。否则,在确定问题时,这只是猜测,因为camickr和我都在我们这边验证了它似乎如预期的那样起作用。