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:
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
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 Fenetre :
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)); }
J'ai fait beaucoup de recherches sur le net mais je ne voit pas ou placer le code qu'on me dit de mettre...
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); }
Si quelqu'un peut m'aider ça serait super.
Merci d'avance.
Partager