2012-01-10 4 views
1

J'essaye de créer un JMenuItem qui est désactivé par défaut, mais une méthode peut être appelée pour l'activer. Juste pour le moment pendant que je teste mon code, je veux que la méthode soit appelée quand je clique sur un autre élément du menu. J'ai jeté un coup d'oeil à la documentation de JMenuItem, mais je suis assez nouveau pour Java et j'ai du mal à trouver exactement ce dont j'ai besoin. J'ai essayé d'utiliser la commande updateUI(), mais moi qui n'a pas fonctionné, donc je suis complètement bloqué. Merci d'avance pour toute aide :)Mise à jour de JMenuItem via ActionListener

C'est ce que j'ai jusqu'à présent:

public class initialScreen extends JFrame implements ActionListener{ 

    Dimension screenSize = new Dimension(800,600); 
    JMenuItem runE, newP; 

    public initialScreen(){ 
     super("Experiment Control Suite"); 
     setSize(screenSize); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JMenuBar bar = new JMenuBar(); 

     JMenuItem newP = new JMenuItem("New"); 
     newP.addActionListener(this); 

     runE = new JMenuItem("Run"); 
     runE.setEnabled(false); 
     runE.addActionListener(this); 

     JMenu exp = new JMenu("Experiment"); 
     exp.add(runE);  

     JMenu par = new JMenu("Participant"); 
     par.add(newP); 
     bar.add(exp); 
     bar.add(par); 
     setJMenuBar(bar); 

     setVisible(true); 
    } 

    public void enableRun(){ 
     runE.setEnabled(true); 
     runE.updateUI(); 
    } 

    public void actionPerformed(java.awt.event.ActionEvent e){ 
     if(e.getSource() == newP) { 
      enableRun(); 
     } 
     else if(e.getSource() == runE) { 
      System.out.println("run has been clicked"); 
     } 
    } 

}

Répondre

3

Votre méthode enableRun est jamais invoqué en raison de la ligne suivante:

JMenuItem newP = new JMenuItem("New"); 

À la place, refactoriser en tant que tel,

newP = new JMenuItem("New"); 

Maintenant, le champ sera correctement initialisé et enregistré comme ActionListener. Et ainsi, lors de la vérification de la source, enableRun sera appelée et l'élément de menu sera activé.

Notez que dans ce cas, updateUI est complètement inutile (je vous suggère de lire le javadoc pour connaître son but).

+0

Aha! Heureux que c'était une erreur stupide plutôt qu'un malentendu fondamental! Merci :) – thisisnic

+0

pour les éléments de base +1 – mKorbel