Bonjour,

Lors de la programmation d'une application java, je fais intervenir deux images en guise de fond de JFrame.

Pour cela j'ai une classe qui me construit un JPanel en chargeant une image :

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
public class JPanelImage extends JComponent
{
	public int mode;
	public TexturePaint texture; 
	public BufferedImage bufferedImage; 
 
	public static final int CENTRE = 0;
	public static final int TEXTURE = 1;
 
	public 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);
		}
	}
 
 
	public 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; 
	}
Cela marche très bien et il ne me reste plus qu'à faire ensuite dans mon package vue dans une classe qui extends JFrame:

(dans le constructeur)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
setContentPane(new JPanelImage(String filename, 0))
sauf que, au début pleine d'innocence et de naïveté j'ai repoussé le problème sous-jacent d'exporter mon jar.

Donc à ce jour mon filename est un chemin de dossier de MON ordinateur....

Pleine de bonne volonté j'ai tenté une alternative concluante jusqu'à maintenant créer un package image et faire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
setContentPane(new JPanelImage("image/nom_image.jpg", 0))
mais toujours rien et en plus java m'engueule:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Exception in thread "main" java.lang.IllegalArgumentException: Width (-1) and height (-1) cannot be <= 0
	at java.awt.image.DirectColorModel.createCompatibleWritableRaster(DirectColorModel.java:1016)
	at java.awt.image.BufferedImage.<init>(BufferedImage.java:329)
Un aide serait la bienvenue