Bonsoir,

J'ai fait une petite application qui simule le déplacement de voitures sur une route.

Voici à quoi ca ressemble :



Problème :
Le thread étant rafraichi toute les 20ms, ca rame beaucoup, l'image scintille, et le déplacement les voitures n'est vraiment pas fluide.
Cela fait au moins une semaine que j'essai de mettre en place un double buffering mais çà ne fonctionne pas. Ca parait pourtant simple à faire mais je n'y arrive pas.

Voilà comme mon programme est structuré :
- une classe PanelRoute (extends JPanel) ou je dessine mon dessin.
- une classe PanelCommandes ou j'ai les bouton pour contrôler le dessin.
- une classe Fenetre où j'affiche ces 2 Panels

Détails des classes :

Classe PanelRoute:
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
 
public class PanelRoute extends javax.swing.JPanel {
 
    private TexturePaint texture_herbe, texture_asphalte;
 
    public PanelRoute() {      
        initComponents();
        setOpaque(true);
        texture_herbe = CreerTexture("herbe.jpg");
        texture_asphalte = CreerTexture("asphalte.jpg");
    }
 
    public Dimension getPreferredSize(){
        return new Dimension(Main.autoroute.longueur()+70, 100);
    }
 
    public Graphics2D DessinerTextures(Graphics g){
        //Dessine les textures
        ...
        return g2d;
    }
 
    public Graphics2D DessinerRoute(Graphics g) {
        //Dessine la route
        ...
        return g2d;
    }
 
    public Graphics2D DessinerPeages(Graphics g) {
        //Dessine les péages
        ...
        return g2d;
    }
 
    public Graphics2D DessinerVehicules(Graphics g) {
        //Dessine les véhicules
        ...
        DessinerPeages(g);
        return g2d;
    }
 
    public void update(Graphics g) 
    { 
         paint(g); 
    }
 
    public void paint(Graphics g) {  
        DessinerTextures(g);
        DessinerRoute(g);
        DessinerVehicules(g);
       }
}
Classe PanelCommande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
public class PanelCommandes extends javax.swing.JPanel {
 
    public PanelCommandes() {
        super();
        initComponents();
        jComboBox2.addItem("Rouge");
        jComboBox2.addItem("Jaune");
        jComboBox3.addItem("2");
        jComboBox3.addItem("3");
        jComboBox3.addItem("4");
        jPanel1.setPreferredSize(new Dimension(200, 180));
    }
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
 
public class Fenetre extends javax.swing.JFrame {
 
    public static JScrollPane jScrollPane1;
    private JPanel jPanel1;
    private JPanel jPanel2;
 
    public Fenetre(Autoroute r) {
        setTitle("Simulation");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(1190,633);
        this.setLayout(new BorderLayout());
        //création du jscrollpane contenant le dessin de la route
        this.jScrollPane1 = new JScrollPane(new PanelRoute());
        this.jScrollPane1.setPreferredSize(new Dimension(900,592));
        this.jScrollPane1.setWheelScrollingEnabled(true);
        //création jpanel contenant le Paneau de commandes
        this.jPanel1 = new JPanel();
        this.jPanel1.add(new PanelCommandes());
        //création jpanel contenant le jScrollPane
        this.jPanel2 = new JPanel();
        jPanel2.setSize(600,600);
        this.jPanel2.add(this.jScrollPane1);
        //ajout des 2 panel dans la fenetre principale
        this.getContentPane().add("West",jPanel1);
        this.getContentPane().add(jPanel2);
        this.setResizable(false);
        setVisible(true);
    }
J'ai fait beaucoup de recherches sur le net mais je ne voit pas ou placer le code qu'on me dit de mettre...
Si quelqu'un peut m'aider ça serait super.

Merci d'avance.