JMenu #setEnabled(false)禁用所有操作,而不是禁用菜单本身

时间:2017-07-30 15:43:21

标签: java swing jmenu

根据我应该实现的用例,必须在某些时候禁用菜单,因此在某些时候它不应该是可点击的。简单地设置

是有意义的
JMenu menu = new JMenu();
menu.setEnabled(false);

确实它适用于此代码示例:

public class MenuTest {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(FrameTest::new);
    }
}

class FrameTest extends JFrame {

    public FrameTest() {
        super();

        JPanel panel = new JPanel(new GridBagLayout());
        JMenuBar menuBar = new JMenuBar();
        JMenu menu1 = new JMenu("test menu1");
        JMenu menu2 = new JMenu("test menu2");
        menuBar.add(menu1);
        menuBar.add(menu2);
        menu1.setEnabled(false);

        setJMenuBar(menuBar);
        setPreferredSize(new Dimension(400, 400));
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }
}

但是在代码库中我正在研究这种方法不起作用,它会启用菜单,但会禁用所有封装的操作。那不是我想要的。出于某些原因,主要是因为它非常大而且不适合这里,我不发布它,但想法是一样的。 JMenuBar填充了JMenu,其中填充了AbstractActions。 通过在课程setEnabled(false)上使用相同的方法JMenu,是否存在结果不同的原因?

1 个答案:

答案 0 :(得分:0)

为什么你不能消失它?

menu1.setVisible(false);

并在需要时回到真实状态。

setEnabled(boolean)的文档很清楚。

  

参数:b如果启用项目@beaninfodescription:是吗?   组件对用户交互绑定做出反应:true preferred:true

组件就在那里,您可以在其中添加它,只是让它能够对用户进行反应而不做出反应。