Java JMenuBar-使用快捷键Ctrl+隐藏JMenu;h、 按键don';设置后不工作可见(假)

Java JMenuBar-使用快捷键Ctrl+隐藏JMenu;h、 按键don';设置后不工作可见(假),java,swing,keystroke,jmenu,jmenubar,Java,Swing,Keystroke,Jmenu,Jmenubar,我尝试使用ctrl+h键来隐藏和显示JMenuBar,我成功地隐藏了JMenu,但我不能使用ctrl+h来显示JMenu,下面是代码: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import view.Menu; import view.Window; public class MenuController implements ActionListener { prote

我尝试使用ctrl+h键来隐藏和显示JMenuBar,我成功地隐藏了JMenu,但我不能使用ctrl+h来显示JMenu,下面是代码:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;    
import view.Menu;
import view.Window;

public class MenuController implements ActionListener {

    protected Window w;
    protected Menu m;

    public MenuController(Window w) {
        this.w = w;
        this.m = w.getMenu();
        m.getQuit().addActionListener(this);
        m.getHide().addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String item = e.getActionCommand();
        if (item.equals("Quitter"))
            System.exit(0);
        if(item.equals("Masquer le menu")) {
            if(m.isVisible() == true)
                m.setVisible(false);
            else
                m.setVisible(true);
        }
    }    
}
getHide(),如果您看到问题出在哪里,请给出击键的JMenuItem。。。 问候

编辑:这里是view.Menu类:

公共类菜单扩展了JMenuBar{

private static final long serialVersionUID = 1L;
private JMenuItem quit = new JMenuItem();
private JMenuItem hide = new JMenuItem();


public Menu() {
    JMenu menu1 = new JMenu("Fichier");

    hide.setText("Masquer le menu");
    hide.setEnabled(true);
    hide.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_MASK));
    menu1.add(hide);

    quit.setText("Quitter");
    quit.setEnabled(true);
    quit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, KeyEvent.CTRL_MASK));
    menu1.add(quit);

    add(menu1);
}

public JMenuItem getQuit() {
    return quit;
}

public JMenuItem getHide() {
    return hide;
}

}

与评论中提到的kleopatra一样,如果菜单被隐藏,您的加速器将无法工作。如果您不需要该组合键来执行其他操作,解决此问题的一种方法(我认为比kleopatra发布的链接中提到的技巧要少一点脏)是在包含菜单栏的组件上注册一个,该组件执行相同的操作集。

如注释中提到的kleopatra,如果菜单被隐藏,您的加速器将无法工作。如果您不需要该组合键来执行任何其他操作,解决此问题的一种方法(我认为比kleopatra发布的链接中提到的技巧要简单一点)是在包含执行相同操作集的菜单栏的组件上注册一个?当您激活“隐藏”菜单项时,当前会发生什么情况?因此,当我激活“隐藏”菜单项时,菜单当前不会显示,我的问题是当我想再次显示菜单时,击键不再工作。如果菜单栏不显示,加速器将不工作,请参阅
视图的超类。菜单
?当您激活“隐藏”菜单项时,当前会发生什么情况?因此,当我激活“隐藏”菜单项时,菜单当前不会显示,我的问题是当我想再次显示菜单时,按键不再工作。如果菜单栏不显示,加速器将不工作,请参阅a,很少有任何一般的优先顺序:-)如果没有太多的项目,复制绑定是一个很好的解决方法谢谢大家的回答,我决定使用键绑定,再次感谢:)@kleopatra肯定:)。我并非有意贬低你提到的任何技巧(事实上,我在手机上阅读,没有注意到你写了另一个答案);我过去也曾使用过类似效果的键绑定,所以这是我首先想到的。当涉及到黑客时,很少有任何一般的优先顺序:-)如果没有太多的项目,复制绑定是一个很好的方法谢谢大家的回答,我决定使用键绑定,再次感谢:)@kleopatra:)。我并非有意贬低你提到的任何技巧(事实上,我在手机上阅读,没有注意到你写了另一个答案);我在过去使用过类似效果的键绑定,所以这是我首先想到的。