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 :
Voici ma classe Bouton :Code:
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); } }); }
et enfin voici ma classe contenant et affichant les images :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 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); } }
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.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 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]); } } }
Merci de votre aide,
Shoki