Bonjour à tous.
Je fais appel à vous car j'essaie désespérément d'afficher une image dans un JPanel, en vain.
Je dispose d'une fenêtre (JSplitPane) divisée en deux parties, une gauche et une droite, chacune étant un JPanel. Dans mon JPanel de gauche (lui-même divisé en 3 JPanel via un BorderLayout), je souhaiterais afficher en bas (donc dans le JPanel placé en BorderLayout.SOUTH) mon image. Malheureusement, rien ne s'affiche. Les images (que je sélectionne via un JFileChooser) sont placées dans un dossier nommé "images" qui est dans le dossier de mon projet (c'es-à-dire à côté des dossiers src et bin). Le JFileChooser fonctionne correctement et me retourne bien le nom du fichier, auquel j'ajoute moi-même le préfixe "images/".
Voici le code (uniquement ce qu'il faut pour comprendre).
La classe JPanelImage :
Le code du bouton sur lequel j'appuie pour sélectionner l'image via le JFileChooser :
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
48
49
50
51
52
53
54 import javax.swing.*; import java.awt.*; import java.awt.image.*; public class JPanelImage extends JComponent { private static final long serialVersionUID = 1L; private int mode; private TexturePaint texture; private BufferedImage bufferedImage; public static final int CENTRE = 0; public static final int TEXTURE = 1; JPanelImage(String fileName, int mode) { this.mode = mode; this.bufferedImage = this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(fileName)); this.texture = new TexturePaint(bufferedImage,new Rectangle(0, 0, bufferedImage.getWidth(), bufferedImage.getHeight())); } public void paintComponent(Graphics g) { switch(mode) { case TEXTURE : Graphics2D g2d = (Graphics2D)g; g2d.setPaint(texture); g2d.fillRect(0, 0, getWidth(), getHeight() ); break; case CENTRE : g.setColor(this.getBackground()); g.fillRect(0,0,getWidth(), getHeight() ); g.drawImage(bufferedImage,(getWidth()-bufferedImage.getWidth())/2,(getHeight()-bufferedImage.getHeight())/2,null); break; default : super.paintComponents(g); } } private BufferedImage toBufferedImage(Image image) { image = new ImageIcon(image).getImage(); BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g = bufferedImage.createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, image.getWidth(null), image.getHeight(null)); g.drawImage(image, 0, 0, null); g.dispose(); return bufferedImage; } }
Merci d'avance. =)
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 this.choixImage.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JFileChooser chooser = new JFileChooser("images"); FiltreImages filtre = new FiltreImages(); chooser.addChoosableFileFilter(filtre); chooser.setAcceptAllFileFilterUsed(false); chooser.setFileFilter(filtre); int returnVal = chooser.showOpenDialog(pan1); if(returnVal == JFileChooser.APPROVE_OPTION) { lienImg.setText(chooser.getSelectedFile().getName()); // dessous = JPanel placé en SOUTH dessous.add(new JPanelImage("images/"+lienImg.getText(), JPanelImage.CENTRE)); } } });
Partager