Afficher une image de fond dans un panel
Comment dessiner une image avec les composants SWING ?Pour afficher une image, nous allons créer une nouvelle classe nommée JImagePanel qui hérite des propriétés d’un JPanel. Le chargement de l'image sera lancé directement dans le constructeur de l'objet. De plus, la propriété setStretch(boolean) fixe la manière dont est affiché le fond du Panel.
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
* Charger et afficher une image dans un panel
* http://www.fobec.com/java/919/charger-afficher-une-image-dans-jpanel.html
* @author fobec 2010
*/
public class JImagePanel extends JPanel {
private Image image = null;
private Boolean stretch = true;
/**
* Constructeur
* @param image image à afficher
*/
public JImagePanel(Image image) {
this.image = image;
}
/**
* Constructeur
* @param file nom du fichier
*/
public JImagePanel(String file) {
this.image = getToolkit().getImage(file);
}
/**
* Position de l'image sur le panel
* @param stretch true: etirer l'image / false: centrer l'image
*/
public void setStretch(Boolean stretch) {
this.stretch = stretch;
}
/**
* Surcharger le dessin du composant
* @param g canvas
*/
protected void paintComponent(Graphics g) {
int x = 0;
int y = 0;
int width = 0;
int height = 0;
if (this.stretch) {
width = this.getWidth();
height = this.getHeight();
} else {
width = this.image.getWidth(this);
height = this.image.getHeight(this);
x=((this.getWidth()-width)/2);
y=((this.getHeight()-height)/2);
}
g.drawImage(this.image, x, y, width, height, this);
}
/**
* Exemple : jPanelImage dans un JFrame
* @param args
*/
public static void main(String[] args) {
JImagePanel imagePanel = new JImagePanel("c:mon-image.png");
//Centrer l'image
imagePanel.setStretch(false);
//Etirer l'image
// imagePanel.setStretch(true);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(imagePanel);
frame.setSize(400, 400);
frame.setLocation(200, 200);
frame.setVisible(true);
}
}
Le composant JImagePanel ajoute les fonctionnalités basiques pour afficher une image de fond. A vrai dire, nous utilisons ce composant dans plusieurs projets JAVA depuis des années pour rendre les interfaces graphiques plus sympa.