1

I created a menu in the menu bar in which I'd like to create a JCheckBoxMenuItem to set a condition for highlighting remaining menu items.

Something like the following pseudo-code:

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

3 回答 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); 
}
于 2012-08-26T12:48:24.450 回答
4

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

于 2012-08-26T12:47:40.737 回答
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)成功,则选中菜单上的复选框并启用其他菜单项。

于 2012-08-26T13:05:36.460 回答