Jimagepanel : un panel affichant des images redimensionnées avec le même aspect ou étirée

Description

Une fois de plus, n'ayant rien trouvé de similaire sur JavaFr, je me suis fait cette petite classe étendant d'un JPanel qui permet d'afficher une image.

Fonctionnalités :
  • Affichage de l'image à partir d'un fichier ou d'une image déjà crée
  • Possibilité de spécifier les coordonnées X et Y de l'image
  • Possibilité d'afficher l'image telle quelle (sans redimensionnement) ou avec autoSize (redimensionnement)
  • Possibilité d'afficher l'image en gardant son aspect d'origine ou non (keepAspect)

Source / Exemple :


import javax.imageio.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;

public class JImagePanel extends JPanel {

	private static final long serialVersionUID = 2724980460740151616L;
	
	private Image _image;
	private int _x;
	private int _y;
	private boolean _autoSize; 
	private boolean _keepAspect;
	
	public JImagePanel(File file, int x, int y, boolean autoSize, boolean keepAspect) throws IOException {
		super();
		
		setImage(ImageIO.read(file));
		setX(x);
		setY(y);
		setAutoSize(autoSize);
		setKeepAspect(keepAspect);
	}
	
	public JImagePanel(File file, int x, int y, boolean autoSize) throws IOException {
		this(file, x, y, true, false);
	}
	
	public JImagePanel(File file, int x, int y) throws IOException {
		this(file, x, y, true);
	}

	public JImagePanel(File file) throws IOException {
		this(file, 0, 0, true);
	}
	
	public JImagePanel(Image image, int x, int y, boolean autoSize, boolean keepAspect) {
		super();
		
		setImage(image);
		setX(x);
		setY(y);
		setAutoSize(autoSize);
		setKeepAspect(keepAspect);
	}
	
	public JImagePanel(Image image, int x, int y, boolean autoSize) {
		this(image, x, y, true, false);
	}
	
	public JImagePanel(Image image, int x, int y) {
		this(image, x, y, true);
	}
	
	public JImagePanel(Image image) {
		this(image, 0, 0, true);
	}
	
	public JImagePanel() {
		super();
		setX(0);
		setY(0);
		setImage(null);
		setAutoSize(false);
	}
	
	public void setImage(Image image) {
		_image = image;
	}
	
	public void setX(int x) {
		_x = x;
	}
	
	public void setY(int y) {
		_y = y;
	}
	
	public void setAutoSize(boolean autoSize) {
		_autoSize = autoSize;
	}
	
	public void setKeepAspect(boolean keepAspect) {
		_keepAspect = keepAspect;
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		if (_image != null) {
			if (!_autoSize) {
				g.drawImage(_image, _x, _y, _image.getWidth(null), _image.getHeight(null), null);
			}
			else {
				Graphics2D g2d = (Graphics2D) g;
				Double scaleWidth = new Double(getWidth()) / new Double(_image.getWidth(null));
				Double scaleHeight = new Double(getHeight()) / new Double(_image.getHeight(null));
				if (_keepAspect) {
					if (scaleWidth > scaleHeight) {
						scaleWidth = scaleHeight;
					}
					else {
						scaleHeight = scaleWidth;
					}
				}
				g2d.scale(scaleWidth, scaleHeight);
				g2d.drawImage(_image, _x, _y, null);
			}
		}
	}

}

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.