IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

paint ou repaint ?


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 95
    Par défaut paint ou repaint ?
    Bonjour,
    Voici mon problème :
    J'ai créé un programme qui affiche une animation.
    (une simulation de l'interaction gravitationnelle entre plusieurs astres. On voit les astres se déplacer en laissant une trainée derrière pour ainsi voir la trajectoire).
    J'ai donc créé une classe qui implémente l'interface runnable et je lance un thread associé à un objet de cette classe. J'ai deux possibilités pour ma méthode run.
    Si ma méthode run est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public void run() {	
              while(true){
                g = (Graphics2D)sys.panSys.getGraphics();
    	sys.panSys.repaint();
         }
    }
    Alors l'animation s'effectue mais c'est l'animation n'est pas fluide. On voit les objets se déplacer, puis sa s'arrête une seconde, puis ça repart. Et ainsi de suite. Pourquoi est-ce saccadé ?

    Si j'implémente run de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void run() {
              Graphics2D g;	
     
              while(true){
    		g = (Graphics2D)sys.panSys.getGraphics();
    		sys.panSys.paint(g);
    		}
    	}
    Là ça marche bien. Mais d'une part je lis de partout que l'on ne doit pas appelé paint directement, de plus quelquefois ça plante.

    Alors laquelle des deux choisir et comment corriger les problèmes dans les deux cas.
    Merci de m'éclairer.

  2. #2
    Membre très actif
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Par défaut
    cela rame car tu tente de repeindre ton anim plusieurs milliers de fois par seconde : il te faut imperativement mettre un sleep entre deux repaint().
    un sleep(20) par exemple te permettra par exemple d'avoir a peu pres 50 images par secondes (et oui il faut comptabiliser le temps necessaire à un paint()). L'ouvrage Java Killer Gaming propose un chapitre tres poussé en ce qui concerne la synchronisation de l'affichage si tu souhaite aller plus loin dans ce domaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void run() {	
       while(true){
          try{
             sys.panSys.repaint();
             sleep(20);
          }
          catch(InterruptedException e) {
             e.printStackTrace();
          }
       }
    }

Discussions similaires

  1. [JPanel] paint, paintComponent et repaint ?
    Par Pill_S dans le forum Composants
    Réponses: 8
    Dernier message: 08/02/2013, 17h38
  2. pb : paint et repaint d'une image à partir d'un thread
    Par zazou0506 dans le forum Graphisme
    Réponses: 1
    Dernier message: 03/01/2008, 00h57
  3. pb paint et repaint d'une image dans un thread
    Par zazou0506 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/01/2008, 22h21
  4. Réponses: 4
    Dernier message: 08/10/2006, 15h16
  5. [JScrollPane][paint] pas de repaint
    Par wonderyan dans le forum AWT/Swing
    Réponses: 15
    Dernier message: 17/01/2006, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo