On aura besoin, en plus de java.awt et javax.swing, des bibliothèques java.io, java.awt.image, et javax.imageio.
Créer une nouvelle classe non exécutable PanneauPerso2 dont le code est :
import javax.imageio.*; import java.awt.*; import java.awt.image.*; import java.io.*; import javax.swing.*; public class PanneauPerso2 extends JPanel{ BufferedImage image_de_fond; PanneauPerso2(){ super(); setOpaque(true); setPreferredSize(new Dimension(500,500)); try { image_de_fond = ImageIO.read(new File("image_fond_bleu.png")); } catch (IOException e) { } } public void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(image_de_fond,0,0,null); } }
PanneauPerso2 ressemble beaucoup à PanneauPerso.
On a ajouté à la classe PanneauPerso2 une variable de type BufferedImage.
Dans le constructeur de PanneauPerso2, on charge dans cette image le contenu d'un fichier à l'aide de la ligne
image_de_fond = ImageIO.read(new File("image_fond_bleu.png"));Cette opération étant susceptible de provoquer une erreur (fichier introuvable) Java nous oblige à prendre en compte cette éventualité. Le plus simple est la méthode utilisée ici :
try { ..... Instruction pouvant déclencher une erreur d'entrée-sortie IOException } catch (IOException e) { ... ce que le programme doit faire en cas d'erreur d'entrée-sortie (éventuellement, rien)...}(voir ici pour en savoir plus sur la gestion des erreurs).
Une fois l'image chargée en mémoire, on n'a plus qu'à la dessiner sur le panneau dans paintComponent. C'est ce que fait la ligne
g.drawImage(image_de_fond,0,0,null);
Si on veut que la taille de l'image soit automatiquement adaptée à celle du panneau on écrira plutôt
g.drawImage(image_de_fond,0,0,this.getWidth(),this.getHeight(),null);
Pour pouvoir visualiser le résultat, changer les PanneauPerso en PanneauPerso2 dans le code de la classe Fenetre, puis exécuter Appel.