Bonjour,
J'ai codé sous Eclipse une JFrame qui contient juste une JComboBox et un JPanel qui instancie une classe DrawImage.
Je voudrais que, en fonction de l'item sélectionné dans la JComboBox,
le JPanel affiche instantanément une image différente.
J'ai bien utilisé la méthode itemStateChanged()
pour catcher le changement d'item et j'ai utilisé plusieurs moyens pour rafraichir la JFrame et le JPanel : repaint(), revalidate(), etc...
mais rien ne marche et le JPanel contient toujours la même image.
Mon programme contient 3 classes :
MaClasse.java : contient juste le main() qui instancie la JFrame avec le setvisible(true).
MaFenetre.java : code ci-dessous :
DrawImage.java : code ci-dessous :
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 public class MaFenetre extends JFrame implements ItemListener { private JComboBox combo; private JPanel panel; private String imagePath = "img/image1.jpg"; public MaFenetre() { setSize(400,400); getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT)); panel = new DrawImage(imagePath,30,30); panel.setPreferredSize(new Dimension(300,300)); combo = new JComboBox(); combo.addItem("image1"); combo.addItem("image2"); combo.addItemListener(this); getContentPane().add(combo); getContentPane().add(panel); } public void itemStateChanged(ItemEvent evt) { if(combo.getSelectedItem().equals("image1")) { this.imagePath = "img/image1.jpg"; panel = new DrawImage(imagePath,30,30); panel.revalidate(); repaint(); getContentPane().validate(); } else if(combo.getSelectedItem().equals("image2")) { getContentPane().validate(); this.imagePath = "img/image2.jpg"; panel = new DrawImage(imagePath,30,30); panel.revalidate(); repaint(); getContentPane().validate(); } System.out.println(imagePath); } }
Je vous remercie pour votre aide car je bloque depuis un moment.
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 public class DrawImage extends JPanel { private String path; private int width; private int height; public DrawImage(String path, int width, int height) { this.path = path; this.width = width; this.height = height; } protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(Toolkit.getDefaultToolkit().getImage(this.path), this.width, this.height, this); } }
a+
Partager