Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > AWT/SWING
AWT/SWING
Forum d'entraide pour les API Swing et AWT. Avant de poster -> FAQ AWT/SWING
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 31/12/2012, 15h52   #1
Warael
Invité de passage
 
Inscription : décembre 2012
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2012
Messages : 1
Points : 0
Points : 0
Par défaut Problème repaint() composant (mise à jour)

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 :
Code :
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();
        }
    });
}
Ce qui me permet de mettre la vue à jour à chaque changement du modèle.
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 :
Code :
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();
      }
Après plusieurs tests, mon observer a l'air d'être bien mis au courant du changement..
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
Warael est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 09h54   #2
chtig
Membre Expert
 
Inscription : janvier 2007
Messages : 1 331
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2007
Messages : 1 331
Points : 1 561
Points : 1 561
Pour bien pouvoir te répondre, il faudrait que tu nous indique quels sont les threads de ton application.
Tu as bien un thread principal qui colorie et un autre qui s'occupe de l'affichage ? Ou tu as tout fait faire au même thread ? (ce qui expliquerait le comportement que tu as)
__________________
Program manager chez TraceOne. http://www.traceone.com
chtig est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h22.


 
 
 
 
Partenaires

Hébergement Web