Je n'arrive pas à utiliser le Double buffering
Bonsoir,
J'ai fait une petite application qui simule le déplacement de voitures sur une route.
Voici à quoi ca ressemble :
http://bailly.yann.free.fr/autres/de.../interface.jpg
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:
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:
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:
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. :cry:
Merci d'avance.