Bonjour à tous !
Alors, je m'explique.
J'ai une classe StdGraphModel qui représentente un graphe. (ce n'est pas un thread ni la classe contenant le main)
Dans une méthode, je colorie tous les sommets.
J'aimerai un délai d'attente entre chaque colorisation (c'est à dire entre 2 lignes de code) pour que l'on voit bien le coloriage se faire.
Mon affichage à mettre à jour est géré par une autre classe dans laquelle je fixe le modèle.
Sur ce modèle j'ajoute un observer qui fait un repaint(). Dans cette classe, j'ai redéfinit paintComponent.
un bout de code :
La vue est un Paint comme ceci :
Ce qui me permet de mettre la vue à jour à chaque changement du modèle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Paint(GraphModel m) { if (m == null) { throw new IllegalArgumentException("m non null"); } model = m; model.addObserver(new Observer() { public void update(Observable o, Object arg) { repaint(); } }); }
Ma méthode de colorisation est dans la classe du GraphModel.
Aussi dans cette méthode, j'ai essayé d'ajouter des setChanged() pour que la vue se rafraichisse et des notifyObservers(). Mais que ce soit avec des Timer ou des Thread.sleep, le résultat est toujours le même : la vue attend le temps total de la colorisation pour tout afficher colorié ...
Je ne vois pas comment faire pour qu'elle se mette bien à jour à chaque changement de couleur ..
Pourtant dans ma méthode de colorisation j'ai bien mis :
Après plusieurs tests, mon observer a l'air d'être bien mis au courant du changement..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 changer couleur sommet //On notifie qu'on a changé la couleur d'un sommet setChanged(); notifyObservers(); //On endort le processus pour voir l'affichage try { Thread.sleep(3000); } catch (InterruptedException e1) { e1.printStackTrace(); }
Mais apparemment mon repaint() ne fait pas toujours appelle à mon paintComponant que j'ai redéfinit ...
Pouvez-vous m'aider ?
Je ne comprends pas ?!
Merci
Partager