Question

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

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

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 " repaint () " aussi.

Modifier:

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

Dans la section "ActionPeformed". méthode de & start; start " bouton, après avoir appelé les deux déclarations ci-dessus, j'exécute une opération "SwingWorker". fil.

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

Était-ce utile?

La solution

  

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

Ce code doit figurer dans le actionPerformed (...) du ActionListener enregistré 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.

Autres conseils

  

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

Il se peut que votre code ne fonctionne pas pour un certain nombre de raisons. Peut-être avez-vous déclaré les variables de bouton deux fois afin de ne pas activer ou désactiver le bouton comme vous le pensez. Peut-être bloquez-vous l'EDT.

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

C’est donc à vous d’isoler le problème. Commencez par un simple cadre contenant 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.

Découvrez comment la base fonctionne avant d'écrire un programme de 200 lignes.

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

Cela fonctionne.

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

}

}

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top