web-dev-qa-db-fra.com

Comment désactiver javax.swing.JButton en Java?

J'ai créé une application de balançoires et il y a un bouton "Démarrer" sur l'interface graphique. Je veux que chaque fois que je clique sur ce bouton "Démarrer", le bouton Démarrer doit être désactivé et le bouton "Arrêter" doit être activé.

Pour cela, j'ai écrit le code suivant dans la méthode "ActionPeformed (...)" du bouton "Démarrer"

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

Mais le code ci-dessus ne crée pas l'effet souhaité sur l'interface graphique.

Le code ci-dessus est-il correct pour ce que je veux faire?

Cela ne fonctionne pas avec "repeindre ()" aussi.

Éditer:

Le code est très long donc je ne peux pas coller tout le code. Je peux en dire plus sur le code.

Dans la méthode "ActionPeformed" du bouton "démarrer", après avoir appelé les deux instructions ci-dessus, j'exécute un thread "SwingWorker".

Ce fil crée-t-il un problème?

23
Yatendra Goel

Pour cela, j'ai écrit le code suivant dans la méthode "ActionPeformed (...)" du bouton "Démarrer"

Vous avez besoin que ce code soit dans la actionPerformed(...) de la ActionListener enregistrée avec le bouton Démarrer, pas pour le bouton Démarrer lui-même.

Vous pouvez ajouter un simple ActionListener comme ceci:

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

notez que votre startButton ci-dessus devra être final dans l'exemple ci-dessus si vous souhaitez créer l'écouteur anonyme dans la portée locale.

26
akf

Le code est très long donc je ne peux pas coller tout le code.

Il peut y avoir un certain nombre de raisons pour lesquelles votre code ne fonctionne pas. Peut-être avez-vous déclaré les variables du bouton deux fois afin de ne pas modifier l'activation/la désactivation du bouton comme vous le pensez. Peut-être que vous bloquez l'EDT.

Vous devez créer un SSCCE pour poster sur le forum.

C'est donc à vous d'isoler le problème. Commencez avec un simple cadre composé de deux boutons et voyez si votre code fonctionne. Une fois que cela fonctionne, essayez de démarrer un thread qui dort simplement pendant 10 secondes pour voir s'il fonctionne toujours.

Apprenez comment fonctionne le basice avant d'écrire un programme de 200 lignes.

Apprenez à faire un débogage de base, nous ne sommes pas des lecteurs d'esprit. Nous ne pouvons pas deviner quelle erreur stupide vous faites en fonction de votre description verbale du problème.

7
camickr

Cela marche.

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();

}

}

3
broschb