Dessiner sous Java

Utiliser une image existante

On peut également personnaliser l'aspect d'un composant en y plaçant une image obtenue à partir d'un fichier, par exemple ce plan du film "la sortie des usines Lumière", pour un peu de chauvinisme local (à enregistrer dans le dossier du projet).

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.

 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé