如何在桌面应用程序中禁用菜单项?

时间:2012-08-26 12:32:59

标签: java swing jmenu disabled-control

我在菜单栏中创建了一个菜单,我想在其中创建一个JCheckBoxMenuItem来设置突出显示剩余菜单项的条件。

类似下面的伪代码:

if login(true)
    then highlight remaining menuitems
else
    un-highlight the menuitems

3 个答案:

答案 0 :(得分:5)

我认为突出显示你的意思是启用/禁用JMenuItem。这是可能的。

使用setEnabled:

JMenuItem item;
item.setEnabled(false); //to disable

与kleopatra建议类似,最好的方法是为每个JMenuItem实现自己的操作,然后让你的操作根据状态启用/禁用按钮:

例如:

public class AMenuAction extends AbstractAction {

      @override
      public void actionPerformed(ActionEvent e) {
           //implement your action behavior here
      }

}

然后用这样的动作构建你的JMenuItem:

AMenuAction afterLoginAction = new AMenuAction();
JMenuItem item = new JMenuItem(afterLoginAction );

当用户登录/注销所需操作时调用setEnabled方法。

void Login()
{
    afterLoginAction.setEnabled(true); 
}

答案 1 :(得分:4)

使用setEnabled( boolean )方法启用和禁用菜单项的方式与其他任何JComponent相同

答案 2 :(得分:2)

创建JCheckBoxMenuItem作为用户登录菜单项

JCheckBoxMenuItem jCheckBoxMenuItem = new JCheckBoxMenuItem();

然后

向其添加动作侦听器

  //unhighlite other menu items before login
  jMenuFileOpen.setEnabled(false);
  //...
  jCheckBoxMenuItem.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent e) {
      if (login(true)){
        jCheckBoxMenuItem.setSelected(true);
        //highlite other menu items
        jMenuFileOpen.setEnabled(true);
        //...
      } else {
        jCheckBoxMenuItem.setSelected(false);
        //unhighlite other menu items
        jMenuFileOpen.setEnabled(false);
        //...
      }
    }
  });

一旦login(true)成功,就会在菜单上选中复选框,并启用其他菜单项。