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

标签 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 {

    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)类菜单扩展 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 中提到的技巧要简单一些)是注册一个 key binding在包含执行相同操作集的菜单栏的组件上。

关于java - JMenuBar - 使用快捷键 Ctrl+h 隐藏 JMenu,setVisible(false) 后按键不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19333053/

相关文章:

java - 是否可以使用 Project Reactor 等待事件而不阻塞线程?

java - 如何在Java Swing中播放mov和wmv视频格式文件?

java - 带超时的 Hibernate LockOptions

java - 显示图像的代码不适用于不同的 Java 编辑器

java - 如何在 Java Swing 中为特殊键定义快捷方式,例如德语变音键 Ä?

java - 禁用 JMenuItem 后 KeyStroke 加速器不工作

c++ - C/C++ 中击键的 Prettyprint ascii 值

JavaFX 应用程序无法使用 native exe bundle 启动

Java 数据绑定(bind) : how to display data in a JTable?

java - 由于某种原因,鼠标事件在java中不起作用