2013-10-12 1 views
1

Je tente de masquer et de montrer un JMenuBar avec la touche ctrl + h, j'ai réussi à le faire pour cacher le JMenu mais je ne peux pas utiliser ctrl + h pour montrer la JMenu, ici il est le code:JMenuBar - Masquer JMenu avec raccourci Ctrl + h, la frappe ne fonctionne pas après setVisible (false)

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(), donner le JMenuItem qui ont la combinaison de touches, si vous voyez où il est le problème ... Cordialement

Edit: voici, la classe view.Menu:

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

}

+0

Quelle est la superclasse de 'view.Menu'? Que se passe-t-il actuellement lorsque vous activez l'élément de menu "Masquer"? – VGR

+0

Donc, quand j'active l'élément de menu masquer, le menu n'est pas affiché actuellement, mon problème est quand je veux montrer le menu à nouveau, la frappe ne fonctionne plus. – zed13

+3

les accélérateurs ne fonctionnent pas si le menuBar n'est pas affiché, voir un [QA récent pour plus de détails] (http://stackoverflow.com/a/18097498/203657) – kleopatra

Répondre

1

Comme kleopatra mentionné dans les commentaires, votre accélérateur ne fonctionnera pas si le menu est caché. Si vous n'avez pas besoin de cette combinaison de touches pour autre chose, une façon de contourner ce problème (un peu moins sale, je pense, que les astuces mentionnées dans le lien kleopatra posté) serait d'enregistrer un key binding sur le composant contenant la barre de menu qui effectue le même ensemble d'actions.

+0

lorsqu'il s'agit de hacks, il y a rarement un ordre général de préférence :-) Dupliquer la reliure est un bon moyen de sortir s'il n'y a pas trop d'items – kleopatra

+0

Merci les gars pour la réponse, je décide d'utiliser la reliure, encore merci :) – zed13

+0

@kleopatra Certainement :). Je ne voulais pas dénigrer l'un des trucs que vous avez mentionnés (en fait, je lisais sur mon téléphone et je n'ai pas remarqué que vous aviez écrit l'autre réponse); Je viens d'utiliser des raccourcis clavier à des effets similaires dans le passé, donc c'est ce qui m'est apparu en premier. – Josh

Questions connexes