Domanda

Ho creato un'applicazione Swings e c'è un " Start " pulsante sulla GUI. Lo voglio ogni volta che ho cliccato su quello " Start " , il pulsante di avvio deve essere disabilitato e il pulsante " Stop " pulsante abilitato.

Per questo ho scritto il seguente codice in " ActionPeformed (...) " metodo di " Start " pulsante

startButton.setEnabled(false);
stopButton.setEnabled(true);

Ma il codice sopra non sta creando l'effetto desiderato sulla GUI.

Il codice sopra è corretto per quello che voglio fare?

Non funziona con " repaint () " anche.

Modifica:

Il codice è molto lungo, quindi non posso incollare tutto il codice. Posso dire di più sul codice.

In " ActionPeformed " metodo di "inizio" pulsante, dopo aver chiamato le due dichiarazioni precedenti, sto eseguendo un " SwingWorker " thread.

Questo thread sta creando problemi?

È stato utile?

Soluzione

  

Per questo ho scritto il seguente codice in " ActionPeformed (...) " metodo di " Start " pulsante

È necessario che quel codice sia in actionPerformed (...) in ActionListener registrato con il pulsante Start, non per il pulsante Start stesso.

Puoi aggiungere un semplice ActionListener come questo:

JButton startButton = new JButton("Start");
startButton.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent ae) {
        startButton.setEnabled(false);
        stopButton.setEnabled(true);
     }
   }
 );

nota che il tuo startButton sopra dovrà essere final nell'esempio sopra se vuoi creare un listener anonimo nell'ambito locale.

Altri suggerimenti

  

Il codice è molto lungo, quindi non posso incollarlo   tutto il codice.

Potrebbero esserci diversi motivi per cui il tuo codice non funziona. Forse hai dichiarato le variabili del pulsante due volte, quindi non stai modificando l'abilitazione / disabilitazione del pulsante come pensi di essere. Forse stai bloccando l'EDT.

Devi creare un SSCCE per pubblicare sul forum.

Quindi tocca a te isolare il problema. Inizia con un semplice riquadro con due pulsanti e verifica se il tuo codice funziona. Una volta che hai funzionato, prova ad avviare un thread che dorme semplicemente per 10 secondi per vedere se funziona ancora.

Scopri come funzionano le basi prima di scrivere un programma a 200 righe.

Scopri come eseguire il debug di base, non siamo dei lettori di mente. Non possiamo indovinare quale stupido errore stai facendo in base alla descrizione verbale del problema.

Funziona.

public class TestButton {

public TestButton() {
    JFrame f = new JFrame();
    f.setSize(new Dimension(200,200));
    JPanel p = new JPanel();
    p.setLayout(new FlowLayout());

    final JButton stop = new JButton("Stop");
    final JButton start = new JButton("Start");
    p.add(start);
    p.add(stop);
    f.getContentPane().add(p);
    stop.setEnabled(false);
    stop.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(true);
            stop.setEnabled(false);

        }
    });

    start.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            start.setEnabled(false);
            stop.setEnabled(true);

        }
    });
    f.setVisible(true);
}

/**
 * @param args
 */
public static void main(String[] args) {
    new TestButton();

}

}

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