Bonjour à tous,

Mon problème est que j'ai créé une animation sur un jeu de mastermind dont je ne comprend pas bien le fonctionnement.
En fait lorsque je met le code ci-dessous ça marche nickel : le couvercle (c'est à dire le truc qui bouge) laisse bien dévoiler ce qu'il y a derrière lui mais je ne comprend pas pourquoi puis qui'il laisse une trace noire ensuite. Car si il laisse une trace noir ensuite il devrait le faire avant ou bien il devrait apparaître une sorte de clignotement. Car ici c'est comme si l'ordi repérait juste ce qu'il y a de nouveau à dessiner.

Classe Principale
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public class Principale {
 
	public static void main(String[] args) {
		Fenetre fenetrePrincipale = new Fenetre();
	}
 
}
Classe Fenetre
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import javax.swing.JFrame;
 
 
public class Fenetre extends JFrame {
  private Conteneur pan = new Conteneur();
 
  public Fenetre(){        
    this.setTitle("Mastermind");
    this.setSize(850, 850);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocationRelativeTo(null);
    this.setContentPane(pan);
    this.setVisible(true);
 
    while (pan.pp==0){
    	pan.gg=pan.gg+1;
    	System.out.print(pan.gg);
    }
    if(pan.pp>=1){
    	for(int i = 0; i <= 300; i++){
    	     pan.z=pan.z+1;
    	      pan.repaint();  
    	      try {
    	        Thread.sleep(10);
    	      } catch (InterruptedException e) {
 
    	      }
 
    }
    }
 
 
 
  }}
Classe Conteneur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.Font;
 
public class Conteneur extends JPanel implements ActionListener {
 
	int l,pp,z,gg;	
	JButton solution = new JButton();
 
	public Conteneur() {								
		solution.addActionListener(this);		
	}
 
	public void paintComponent(Graphics g) {	
		if(pp==0){
		solution.setBounds(387, 720,160,36);
		solution.setBackground(Color.pink);
		solution.setText("Solution");
		add(solution);
 
		}		
				l=10;
				g.setColor(new Color(130,62,0));
				g.fillRoundRect(95, 30 + 62*l, 210, 50, 10, 10);					
				g.setColor(new Color(79,37,0));
				g.drawLine(95, 35+ 62*l, 95, 75+ 62*l);
				g.drawLine(96, 35+ 62*l, 96, 74+ 62*l);
				g.drawLine(96, 34+ 62*l, 97, 34+ 62*l);
				g.drawLine(96, 33+ 62*l, 97, 33+ 62*l);
				g.drawLine(97, 32+ 62*l, 98, 32+ 62*l);
				g.drawLine(100, 30+ 62*l, 300, 30+ 62*l);
				g.drawLine(98, 31+ 62*l, 300, 31+ 62*l);
				g.setColor(new Color(172,82,0));
				g.drawLine(98, 78+ 62*l, 298, 78+ 62*l);
				g.drawLine(98, 79+ 62*l, 299, 79+ 62*l);
				g.drawLine(304, 34+ 62*l, 304, 75+ 62*l);
				g.drawLine(303, 34+ 62*l, 303, 74+ 62*l);
				g.setColor(new Color(198,118,0));
				g.drawLine(299, 78+ 62*l, 303, 78+ 62*l);
				g.drawLine(300, 79+ 62*l, 302, 79+ 62*l);
				g.drawLine(302, 77+ 62*l, 304, 77+ 62*l);
				g.drawLine(303, 76+ 62*l, 304, 76+ 62*l);
				g.drawLine(303, 75+ 62*l, 303, 75+ 62*l);
				g.setColor(new Color(123,60,0));
				g.drawLine(96, 75+ 62*l, 96, 77+ 62*l);
				g.drawLine(97, 77+ 62*l, 97, 78+ 62*l);
				g.drawLine(303, 33+ 62*l, 304, 33+ 62*l);
				g.drawLine(302, 32+ 62*l, 303, 32+ 62*l);
				g.drawLine(301, 31+ 62*l, 302, 31+ 62*l);
		 	g.setColor(new Color(153,73,0));
		    g.fillRoundRect(95 + z,650,210,50,10,10);
		    //On le dessine aux coordonnées souhaitées
		    g.setColor(Color.black);//jaime bien la couleur new Color(130,62,0)
			g.drawLine(100 + z, 649, 300 + z, 649);
			g.drawLine(100 + z, 700, 300 + z, 700);
			g.drawLine(94 + z, 655, 94 + z, 695);
			g.drawLine(305 + z, 655, 305 + z, 695);
			g.drawArc(95 + z, 650, 10, 10, 90, 90);
			g.drawArc(295 + z, 650, 10, 10, 0, 90);
			g.drawArc(295 + z, 690, 10, 10, 270, 90);
			g.drawArc(95 + z, 690, 10, 10, 180, 90);
			g.setColor(new Color(249,118,0));// le foncé
			g.drawLine(96 + z, 34+ 620, 97 + z, 34+ 620);
			g.drawLine(96 + z, 33+ 620, 97 + z, 33+ 620);
			g.drawLine(97 + z, 32+ 620, 98 + z, 32+ 620);
			g.drawLine(100 + z, 30+ 620, 300 + z, 30+ 620);
			g.drawLine(98 + z, 31+ 620, 300 + z, 31+ 620);
			g.setColor(new Color(198,94,0));
			g.drawLine(95 + z, 35+ 620, 95 + z, 75+ 620);
			g.drawLine(96 + z, 35+ 620, 96 + z, 74+ 620);
			g.setColor(new Color(123,58,0));// new Color(123,60,0)
			g.drawLine(96 + z, 75+ 620, 96 + z, 77+ 620);
			g.drawLine(97 + z, 77+ 620, 97 + z, 78+ 620);
			g.drawLine(303 + z, 33+ 620, 304 + z, 33+ 620);
			g.drawLine(302 + z, 32+ 620, 303 + z, 32+ 620);
			g.drawLine(301 + z, 31+ 620, 302 + z, 31+ 620);
			g.drawLine(98 + z, 78+ 620, 298 + z, 78+ 620);
			g.drawLine(98 + z, 79+ 620, 299 + z, 79+ 620);
			g.drawLine(304 + z, 34+ 620, 304 + z, 75+ 620);
			g.drawLine(303 + z, 34+ 620, 303 + z, 74+ 620);
			g.drawLine(299 + z, 78+ 620, 303 + z, 78+ 620);
			g.drawLine(300 + z, 79+ 620, 302 + z, 79+ 620);
			g.drawLine(302 + z, 77+ 620, 304 + z, 77+ 620);
			g.drawLine(303 + z, 76+ 620, 304 + z, 76+ 620);
			g.drawLine(303 + z, 75+ 620, 303 + z, 75+ 620);
		}
 
		public void actionPerformed(ActionEvent arg0) {
		Object source = arg0.getSource();						
		 if (source == solution) {			
			pp=1;
 
				}}}
Alors que si on met ce qu'il y a dans la Fenetre (for(i=0;i=300:i++){... etc) dans le conteneur dans if(source==solution){ cela crée des clignotements du aux successifs dessins les uns sur les autres.

comment expliquer que le code que je vous ai montrer fonctionne?

Merci d'avances pour vos explications.