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

问题描述 投票:0回答:3

我在菜单栏中创建了一个菜单,我想在其中创建一个

JCheckBoxMenuItem
来设置突出显示剩余菜单项的条件。

类似下面的伪代码:

if login(true)
    then highlight remaining menuitems
else
    un-highlight the menuitems
java swing jmenu disabled-control
3个回答
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); 
}

4
投票

启用和禁用菜单项的方式与任何其他

JComponent
相同,使用
setEnabled( boolean )
方法


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)
成功,菜单上的复选框就会被选中,并且其他菜单项将被启用。

© www.soinside.com 2019 - 2024. All rights reserved.