Bonjour a tous, j'ai un petit soucis:

j'ai un programme qui superpose une quarantaine d'images png, via imageIO et je veux rajouter a ma JFrame des boutons. Seulement, lorsque je met un bouton, dont j'ai redefinit les icones, et que je met ContentAreaFilled(false),
les performances sont très mauvaise, le système met 5 secondes a se rendre compte que je suis sur le bouton et à passer à l'autre image enfoncée.

Ceci est valable pour tous les composants, dès que je definie l'opacité à false, le systeme ralentit.

voici le code (simplifié) de mon programme :

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
public Interface() {
 
        setSize(1024,800);
 
        setContentPane(new AffichageImagesPanel());
 
        Bouton b = new Bouton(500,500,"1");
 
        add(b.labelBouton);  
        add(b.boutonPays);
 
        addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                formKeyPressed(evt);
            }
        });   
 
    }
Voici ma classe Bouton :

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
public class Bouton{
 
    final String urlImage = "build/classes/risk/png/";
 
    ImageIcon normal,dessus;
 
    JLabel labelBouton;
    JButton boutonPays;
 
    int x,y;
 
    String nbArmee;
 
    /** Creates a new instance of Bouton */
    public Bouton(int _x,int _y,String _nbArmee) {
 
        x=_x;
        y=_y;
        nbArmee=_nbArmee;
 
        dessus = new ImageIcon(urlImage + "dessus.jpg");
        normal = new ImageIcon(urlImage + "normal.jpg");
 
        labelBouton = new JLabel(nbArmee);
        labelBouton.setBounds(x+18,y+5,40,40);
 
        boutonPays = new JButton(normal);
        boutonPays.setRolloverIcon(dessus);
        boutonPays.setBounds(x,y,40,40);
        boutonPays.setRolloverEnabled(true);
        boutonPays.setFocusPainted(false);
        boutonPays.setBorderPainted(false);
        boutonPays.setContentAreaFilled(false);
    }
 
}
et enfin voici ma classe contenant et affichant les images :

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
 
 public void paintComponent(Graphics g){
 
            System.out.println("je suis dans paint");
            g.drawImage(fond,0,0,fond.getWidth(),fond.getHeight(),null);
 
            int i;
 
            for (i=0 ; tabloNomsPays[i]!=null ; i++){
                g.drawImage(tabloPng[i],0,0,tabloPng[i].getWidth(),tabloPng[i].getHeight(),null);
            }
 
    }
 
    /**
     * Creates a new instance of AffichageImagesPanel
     */
    public AffichageImagesPanel() {
 
        tabloPng = new BufferedImage[45];
        int i;
 
        this.setDoubleBuffered(true);
 
        try{
		fond = ImageIO.read(new File(urlImage + "fond.jpg"));
	}catch(Exception e){System.out.println(e);}
 
        for (i=0;tabloNomsPays[i]!=null;i++){
 
            try{
		tabloPng[i] = ImageIO.read(new File(urlImage + tabloNomsPays[i] + random() + ".png"));
            }catch(Exception e){
                System.out.println(e);
                System.out.println(tabloNomsPays[i]);
                }  
 
        } 
    }
je ne sais pas si utiliser le double buffer ameliorerait les performances, mais en tout cas je ne comp)rend pas pourkoi ceci ne fonctionne pas.

Merci de votre aide,

Shoki