根据我应该实现的用例,必须在某些时候禁用菜单,因此在某些时候它不应该是可点击的。简单地设置
是有意义的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
,是否存在结果不同的原因?
答案 0 :(得分:0)
为什么你不能消失它?
menu1.setVisible(false);
并在需要时回到真实状态。
setEnabled(boolean)的文档很清楚。
参数:b如果启用项目@beaninfodescription:是吗? 组件对用户交互绑定做出反应:true preferred:true
组件就在那里,您可以在其中添加它,只是让它能够对用户进行反应而不做出反应。