JMenuBar - 使用快捷键Ctrl + h隐藏JMenu,在setVisible(false)后按键不起作用

时间:2013-10-12 10:16:10

标签: java swing keystroke jmenu jmenubar

我尝试使用ctrl + h按键隐藏和显示JMenuBar,我已成功执行此操作来隐藏JMenu但我无法使用ctrl + h来显示JMenu,这里他是代码:< / p>

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类:

public class 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;
}

}

1 个答案:

答案 0 :(得分:1)

与评论中提到的kleopatra一样,如果菜单被隐藏,您的加速器将无法工作。如果你不需要其他任何关键组合,那么解决这个问题的方法(我认为,比发布链接kleopatra中提到的技巧稍微不那么脏)就是在组件上注册key binding包含执行相同操作集的菜单栏。