Domanda

Sto cercando di creare un JMenuItem che è disabilitato per impostazione predefinita, ma un metodo può essere chiamato per attivarlo. Solo per il momento, mentre sto testando il mio codice, voglio il metodo da chiamare quando clicco su un altro elemento del menu. Ho avuto uno sguardo alla documentazione per JMenuItem, ma sono abbastanza nuovo a Java e sto avendo problemi a trovare esattamente quello che mi serve. Ho provato con il comando updateUI (), ma che non ha funzionato, quindi sono totalmente bloccato. Grazie in anticipo per qualsiasi aiuto:)

Questo è quello che ho finora:

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

}

È stato utile?

Soluzione

Il tuo metodo enableRun non viene mai richiamato a causa del seguente riga:

JMenuItem newP = new JMenuItem("New");

Invece, refactoring come tale,

newP = new JMenuItem("New");

Ora, il campo sarà correttamente inizializzato e registrato come ActionListener. E così, quando si verifica la fonte, enableRun verrà richiamato e la voce di menu verrà attivato.

Si noti che in questo caso, updateUI è completamente inutile (vi consiglio di leggere il javadoc per imparare il suo scopo).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top