Frage

Ich versuche, standardmäßig ein JMenuitem zu erstellen, das jedoch aufgerufen werden kann, um es zu aktivieren. Nur für den Moment, während ich meinen Code teste, möchte ich, dass die Methode aufgerufen wird, wenn ich auf einen anderen Menüelement klicke. Ich habe mir die Dokumentation für JMenuitem angesehen, aber ich bin ziemlich neu in Java und ich habe Probleme, genau das zu finden, was ich brauche. Ich habe versucht, den Befehl updateUi () zu verwenden, aber ich habe nicht funktioniert, also bin ich total festgefahren. Danke im Voraus für jede Hilfe :)

Das habe ich bisher:

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");
        }
    }

}

War es hilfreich?

Lösung

Ihre Methode enableRun wird niemals wegen der folgenden Zeile aufgerufen:

JMenuItem newP = new JMenuItem("New");

Stattdessen refaktor es als solche,

newP = new JMenuItem("New");

Jetzt wird das Feld korrekt initialisiert und als registriert ActionListener. Und damit, wenn Sie die Quelle überprüfen, enableRun wird aufgerufen und der Menüelement wird aktiviert.

Beachten Sie, dass in diesem Fall, updateUI ist völlig unnötig (ich schlage vor, Sie lesen den Javadoc, um seinen Zweck zu lernen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top