JMenuBar — скрыть JMenu с помощью сочетания клавиш Ctrl+h, нажатие клавиши не работает после setVisible (false)

Я пытаюсь скрыть и показать JMenuBar с помощью нажатия клавиши ctrl+h, мне удалось сделать это, чтобы скрыть 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;
}

}


person zed13    schedule 12.10.2013    source источник
comment
Что такое суперкласс view.Menu? Что в настоящее время происходит, когда вы активируете пункт меню «Скрыть»?   -  person VGR    schedule 12.10.2013
comment
Поэтому, когда я активирую элемент меню скрытия, меню в настоящее время не отображается, моя проблема заключается в том, что когда я хочу снова показать меню, нажатие клавиши больше не работает.   -  person zed13    schedule 12.10.2013
comment
ускорители не работают, если панель меню не отображается, см. недавний контроль качества для получения подробной информации   -  person kleopatra    schedule 12.10.2013


Ответы (1)


Как и клеопатра, упомянутая в комментариях, ваш ускоритель не будет работать, если меню скрыто. Если вам не нужна эта комбинация клавиш для чего-либо еще, один из способов обойти эту проблему (я думаю, немного менее грязный, чем уловки, упомянутые в ссылке, опубликованной kleopatra) — это зарегистрировать привязка клавиш к компоненту, содержащему строку меню, которая выполняет тот же набор действий.

person Josh    schedule 12.10.2013
comment
когда дело доходит до хаков, редко существует какой-либо общий порядок предпочтения :-) Дублирование привязки - хороший выход, если элементов не слишком много. - person kleopatra; 13.10.2013
comment
Спасибо ребята за ответ, решаю использовать привязку клавиш, еще раз спасибо :) - person zed13; 13.10.2013
comment
@kleopatra Определенно :). Я не хотел принижать ни один из упомянутых вами трюков (на самом деле, я читал на своем телефоне и не заметил, что вы написали другой ответ); Я просто использовал привязки клавиш для аналогичного эффекта в прошлом, так что это то, что мне запомнилось в первую очередь. - person Josh; 13.10.2013