Bonsoir à tous,

Je suis débutant en Java et j'ai quelques questions concernant les interfaces graphiques.

J'ai effectué une recherche rapidement et n'ai trouvé aucune réponse exacte à mes questions, donc désolé si ces questions ont déjà été posées.

Voici mon problème :
J'essais actuellement de développer une petite application pour simuler le déplacement de voitures sur une route.
J'ai donc une classe Voiture, une classe Route, et une classe Fenetre qui me permet de faire un affichage graphique.

- Premierement j'utilise TexturePaint pour que mes images ne soient pas déformées mais reproduite, la fonction suivante s'en charge :
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
 
public Graphics2D DessinerTextures(Graphics g){
        //Création d'un graphics 2d
        Graphics2D g2d = (Graphics2D)g;
        //Création de la BufferedImage
        ImageIcon image_herbe = new ImageIcon("herbe.jpg");
        BufferedImage buffImg_herbe = new BufferedImage(image_herbe.getIconWidth(), image_herbe.getIconHeight(), BufferedImage.TYPE_INT_RGB);
        //initialisation de l'images
        Graphics2D g2d_herbe = buffImg_herbe.createGraphics();
        g2d_herbe.drawImage(image_herbe.getImage(), 0, 0, this);
        //création du rectangle aux dimension de la texture de fond
        Shape imgRect_herbe = new Rectangle2D.Double(0.0, 0.0, buffImg_herbe.getWidth(), buffImg_herbe.getHeight());
         //Création du TexturePaint
        TexturePaint texture_herbe = new TexturePaint(buffImg_herbe, imgRect_herbe.getBounds2D());
        //Création des shapes
        Shape rectShapeHaut = new Rectangle2D.Double(jScrollPane1.getX(),jScrollPane1.getY(),route.longueur(),123);
        Shape rectShapeBas = new Rectangle2D.Double(jScrollPane1.getX(),jScrollPane1.getY()+route.largeur()+123,route.longueur(),jScrollPane1.getHeight());    
        //dessine les rectangles remplis avec les textures
        g2d.setPaint(texture_herbe);
        g2d.fill(rectShapeHaut);
        g2d.fill(rectShapeBas);
        return g2d;
    }
- J'ai ensuite ça qui paint les textures et les voitures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
 public void paint(Graphics g) {
        DessinerTextures(this.getGraphics());
        for (int voie = 0; voie < route.nbVoies(); voie++)
	    for (int i = 0; i < route.longueur(); i++) 
                  if (existeVoiture(voie,i)) {
                    ImageIcon img_voiture = new ImageIcon("voiture_rouge.jpg");
                    Image image_voiture = img_voiture.getImage();
                    ImageObserver image_voiture_obs = img_voiture.getImageObserver();
                    g2d.drawImage(image_voiture,jScrollPane1.getX()+(int)route.vehicule(voie,i).position,jScrollPane1.getY()+133+20*voie,image_voiture_obs);
                  }
}
Problème : le thread étant rafraichi toute les 30ms, ca rame beaucoup et l'image scintille !
De plus, là apparement je ne dessine pas dans mon jScrollPane mais par dessus donc les scrolbars ne s'affichent pas l'orsque le dessin est plus grand que le jScrollPane, et je ne sais pas comment faire.

Voici une petite image de l'interface pour vous donner une petite idée :


En résumé voici ce que je souhaiterais :
- suivant la longueur de l'autoroute une scrollbar horizontal doit apparaître.
- l'éxecution doit être fluide, sans scintillements.

Comment faire ? mon code est-il otpimisé ?

Merci à tous.
A vous lire.