/ / GUI ne se met pas à jour correctement - java, swing

GUI ne se met pas à jour correctement - java, swing

Je viens de terminer un projet qui consiste à créer un labyrinthe et à programmer trois "robots" pour les parcourir en utilisant différentes stratégies. Les classes impliquées dans mon implémentation sont:

  • une classe abstraite Robot avec trois sous-classes
  • une classe Maze qui gère les opérations logiques du labyrinthe
  • une classe JFrame qui affiche le labyrinthe graphiquement et montre le robot qui la traverse

Enfin, j'ai un point d'entrée avec une méthode principale qui contient uniquement les éléments suivants:

    Maze m = new Maze();
MazeFrame mf = new MazeFrame(m);
RightHandRobot mr = new RightHandRobot(m, mf);
mr.go(m);

Cela fonctionne parfaitement - le labyrinthe est affiché sur l'interface graphique et je peux regarder le robot se déplacer à travers lui jusqu'à ce qu'il atteigne la fin - l'effet désiré.

Mon problème est le suivant: En haut de JFrame, il y a trois boutons, chacun avec un ActionListener qui crée une instance de l'un des types de robot et appelle sa méthode go, ce qui provoque son déplacement jusqu'à ce qu'il soit dans la "cellule d'arrivée". Lorsque je clique sur l'un de ces boutons, le robot est créé et commence à se déplacer (que je peux vérifier par des instructions println exécutées à chaque déplacement), mais je ne vois pas le robot se déplacer sur l'interface graphique. L'interface graphique n'est mise à jour que lorsque le robot atteint la fin (c'est-à-dire lorsque la méthode go () est terminée), à ​​quel point tout le chemin emprunté par le robot est affiché.

Pourquoi l'interface graphique est-elle correctement mise à jour lorsque le robot est créé par la méthode principale, mais pas lors de sa création par la classe JFrame?

Je ne suis pas sûr de savoir quel code vous devez voir pour m'aider, alors dites-moi ce que vous devez voir.

Réponses:

2 pour la réponse № 1

Utiliser un javax.swing.Timer pour animer l'animation, comme montré dans cette FleetPanel. À chaque tick, l'auditeur de la minuterie ne doit rendre que des robots en cours d'exécution.

image