+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Inscrit en
    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

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    janvier 2007
    Messages
    1 331
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 331
    Points : 1 615
    Points
    1 615

    Par défaut

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •