Bonjour,
j'ai un problème qui doit être assez classique.
Le voici :
Pour faire simple, je veux créer une petite animation, mettons un rectangle qui se déplace dans un JPanel. Sa position dépend de la numérotation d'étapes.
J'ai une méthode dans une classe Anim qui trace le rectangle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
public void traceRectangle(int etape, Graphics2D g2D)
{
     g2D.draw(rectangle);
}
puis je redéfinie, comme il se doit, la méthode paintComponent de la classe JPanel comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
protected void paintComponent(Graphics g)
{
        super.paintComponent(g);
        Graphics2D g2D = (Graphics2D) g;
 
        for(int etape = 1; etape <= 10; etape++)
        {
            anim.traceRectangle(etape, g2D);
            System.out.println("Etape = " + etape);
            Thread.sleep(1000);
         }
}
Je passe bien sûr sur le bloc try/catch que je n'ai pas mis pour simplifier.

Donc quand je lance le prog, les messages : "Etape = 1 Etape = 2, ... Etape = 10, s'affichent bien à raison d'une étape par seconde comme prévu, en revanche, et c'est là mon problème, les rectangles ne s'affichent pas les uns après les autres mais les 10 d'un seul coup.
Alors pourquoi cela fonctionne avec l'affichage des étapes et pas avec l'affichage des rectangles ?
Et comment remédier simplement à ce problème ? ... sans créer de Thread (car ça je sais faire, ou à peu près).

Merci pour vos réponses.
Virgile