Bonjour,

Je souhaite afficher une image dans un JLabel, lui-même contenu dans un JPanel.

Pour ça, pas de problème, j'utilise le code suivant qui fonctionne très bien :
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 class testImageLabel extends JFrame {
	private JPanel panel = new JPanel();
	private JLabel imageLabel;
	private ImageIcon icon = new ImageIcon("Image.jpg");
 
	public testImageLabel() {
	    this.setLocationRelativeTo(null);
	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setTitle("Test Image Label");
	    this.setSize(400, 300);
 
	    imageLabel = new JLabel(icon);
	    this.panel.add(imageLabel);
	    this.panel.setBackground(Color.white);
	    this.getContentPane().add(panel);
	    this.setVisible(true);
	}
 
	public static void main(String[] args) {
		testImageLabel test = new testImageLabel();
	}
}
Le problème est que l'image est plus grande que le JLabel, elle est donc tronquée, il en manque une partie.

J'ai cherché à réduire sa taille pour l'adapter à celle du JPanel, je me suis notamment inspiré de ce post https://www.developpez.net/forums/d8...-image-jlabel/.
Voici mon code adapté :
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
 
public class testImageLabel extends JFrame {
	private JPanel panel = new JPanel();
	private JLabel imageLabel;
	private ImageIcon icon = new ImageIcon("Image.jpg");
 
	public testImageLabel() {
	    this.setLocationRelativeTo(null);
	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setTitle("Test Image Label");
	    this.setSize(400, 300);
 
	    Image imageZoom = scaleImage(icon.getImage(), 100);
	    Icon scaledIcon = new ImageIcon(imageZoom);
	    imageLabel = new JLabel("Label", scaledIcon, 10);
	    panel.add(imageLabel, BorderLayout.CENTER);
 
	    this.panel.setBackground(Color.white);
	    this.getContentPane().add(panel);
	    this.setVisible(true);
	}
 
	//Méthode pour redimensionner une image
	public static Image scaleImage(Image source, int width, int height) {
	    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
	    Graphics2D g = (Graphics2D)img.getGraphics();
	    g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
	    g.drawImage(img, 0, 0, width, height, null);
	    g.dispose();
	    return img;
	}
 
	//Méthode de calcul (en pixels) des paramètres widht et height de la méthode précédente
	public static Image scaleImage(Image source, int size) {
		int width = source.getWidth(null);
		int height = source.getHeight(null);
		double f = 0;
		if (width < height) { // portrait
		    f = (double)height / (double)width;
		    width = (int)(size / f);
		    height = size;
		} else { //paysage
		    f = (double)width / (double)height;
		    width = size;
		    height = (int)(size / f);
		}
		return scaleImage(source, width, height);
	}
 
	public static void main(String[] args) {
		testImageLabel test = new testImageLabel();
	}
}
Et là, le problème est que ça n'affiche pas l'image dans le JLabel, il y a uniquement le petit texte "Label" qui apparaît, laissant deviner que le JLabel est bien présent dans le JPanel. Je n'ai pas d'erreur de compilation.

J'ai fait différents essais, mais sans succès. Je ne comprends pas où est le problème. Quelqu'un voit-il le problème ? ou comment afficher l'image ?