import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JComponent;
public class ImageResized extends JComponent implements MouseListener{
private Image image;
/**
* Les propriètées maxX & maxY
* permettent de définir les valeurs max de
* l’image
**/
private int maxX=50;
private int maxY=50;
private int dx;
private int dy;
//Facteur de réduction de l’image
private float facteur;
//Booléen permettant de savoir si on est sur l’image
private boolean over;
/**
* Permet d'afficher une image
* au format <b>maxX & maxY<b>
* @param image
*/
public ImageResized(Image image) {
this.image=image;
this.setPreferredSize(new Dimension(maxX,maxY));
repaint();
initialize();
}
/**
* Constructeur
* Permet d'afficher une image au format
* spécifié par <b>dim<b>
* @param image
* @param dim
*/
public ImageResized(Image image,Dimension dim) {
this.image=image;
this.maxX=dim.width;
this.maxY=dim.height;
this.setPreferredSize(new Dimension(maxX,maxY));
repaint();
initialize();
}
public ImageResized() {
initialize();
}
/**
* Ici on spécifie que ce composant aura un listener
* qui permettra d’afficher un rectangle de couleur différente selon
* que l’on se positionne sur l’image ou non.
**/
private void initialize() {
this.addMouseListener(this);
}
/**
* On redéfini la méthode paint pour que le composant affiche
* une image.
**/
@Override
public void paint(Graphics arg0) {
Graphics2D g = (Graphics2D)arg0;
/**
* Algo permettant de calculer la taille de l’image à afficher.
* Ici facteur va permettre de réduire l’image selon des règles de
* proportionnalité
**/
float x = image.getWidth(null);
float y = image.getHeight(null);
facteur = 1;
if (x>y){
// Le facteur est calculé à partir de x
if (x>maxX){
facteur=x/maxX;
}
}else{
// Le facteur est calculé à partir de y
if (y>maxY){
facteur=y/maxY;
}
}
//Permet de déterminer la grandeur de l’image
dx = (int) (x/facteur);
dy = (int) (y/facteur);
int ty = (maxY/2)-(dy/2);
int tx = (maxX/2)-(dx/2);
/**
* Permet d’afficher l’image passée en paramètre.
* Si la sourie est sur l’image, alors on spécifie une couleur
* sinon on en sélectionne une autre
* avant d’afficher un rectangle autour de l’image
*
**/
g.drawImage(image,tx,ty,dx,dy,this);
if (over){
g.setColor(Color.yellow);
}else{
g.setColor(Color.blue);
}
g.drawRect(tx,ty,getWidth()-1,dy);
}
public void mouseClicked(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mouseEntered(MouseEvent arg0) {
over=true;
repaint();
}
public void mouseExited(MouseEvent arg0) {
over=false;
repaint();
}
public ActionListener addActionListener() {
return this.addActionListener();
}
}
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import javax.swing.JFrame;
import com.java.panel.PanelTestBouton;
import com.java.viewImage.ImageResized;
public class FrameLauncher extends JFrame {
public FrameLauncher() {
this.setSize(120,150);
this.setLayout(new FlowLayout());
this.add(new ImageResized(Toolkit.getDefaultToolkit().getImage("Default.PNG"),new Dimension(100,100)));
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE);
}
public static void main(String[] args) {
new FrameLauncher();
}
}