import javax.swing.JLabel; import java.awt.Image; import java.awt.Graphics; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseEvent; import java.awt.event.InputEvent; import javax.swing.JPanel; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import java.awt.Color; import java.awt.Graphics2D; import java.awt.TexturePaint; import java.awt.Rectangle; /** * @author Kaliel * @version 1.0 */ public class ImageLabel extends JLabel implements MouseListener,MouseMotionListener { private Image backGround = null; private int x,y,xprec,yprec; private int Widthsizable=1,Heightsizable=1; // image redimensionnable en largeur et hauteur private int YDnD=1,XDnD=1; // image déplaçable suivant X et Y private BufferedImage buf; // image dans buffer pour mode texture private int affmode =0; // mode texture ou mode jlabel prend dimensions image private boolean DnD=true; // mode drag and drop public ImageLabel(Image backGround) { // rend sensible l'image à la souris this.addMouseListener(this); this.addMouseMotionListener(this); this.backGround = backGround; this.setOpaque(false); this.buf= this.toBufferedImage(backGround); // stockage image dans buffer } public ImageLabel(Image backGround,int mode) { this(backGround); this.affmode=mode; } public ImageLabel(Image backGround,int mode,boolean wsizable,boolean hsizable,boolean DnD) { this(backGround,mode); // étirable en X ou non if(wsizable) this.Widthsizable=1; else this.Widthsizable=0; //étirable en Y ou non if(hsizable) this.Heightsizable=1; else this.Heightsizable=0; // validation mode Drag and drop this.setDragAndDrop(DnD); } public void paint( Graphics g ) { if (affmode==0){ //mode texture Graphics2D g2d = (Graphics2D) g; TexturePaint texture = new TexturePaint(buf, new Rectangle(0, 0, buf.getWidth(), buf.getHeight())); g2d.setPaint(texture); g2d.fillRect(0, 0, getWidth(), getHeight()); } else if ( backGround != null ) // mode image taille du jlabel g.drawImage( backGround, 0, 0,getSize().width, getSize().height, this ); super.paint( g ); } // image stockée dans un buffer pour l'utiliser après comme une texture private BufferedImage toBufferedImage(Image image) { image = new ImageIcon(image).getImage(); BufferedImage bufferedImage = new BufferedImage( image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_RGB); Graphics g = bufferedImage.createGraphics(); g.setColor(Color.white); g.fillRect(0, 0, image.getWidth(null), image.getHeight(null)); g.drawImage(image, 0, 0, null); g.dispose(); return bufferedImage; } public void mouseClicked(MouseEvent mouseEvent) { } //lorsque l'on clique avec la souris sur l'image on garde les coordonnées public void mousePressed(MouseEvent mouseEvent) { x = mouseEvent.getX(); y = mouseEvent.getY(); xprec=x; yprec=y; } //fonction pour rendre étirable en X l'image public void setWidthSizable (boolean xsizable){ if (!xsizable)this.Widthsizable=0; else this.Widthsizable=1; } // fonction pour rendre étirable en Y l'image public void setHeigthtSizable (boolean ysizable){ if (!ysizable)this.Heightsizable=0; else this.Heightsizable=1; } //fonction pour valider le mode Drag and Drop public void setDragAndDrop (boolean DnDenable){ if (DnDenable){ XDnD=1; YDnD=1; } else{ XDnD=0; YDnD=0; } this.DnD=DnDenable; } // fonction pour choisir si on veux utiliser le DnD en X et/ou Y public void setDragAndDrop (boolean Xenable,boolean Yenable){ if (Xenable) XDnD=1; else XDnD=0; if(Yenable) YDnD=1; else YDnD=0; } public void mouseReleased(MouseEvent mouseEvent) { } public void mouseEntered(MouseEvent mouseEvent) { } public void mouseExited(MouseEvent mouseEvent) { } // fonction de déplacement ou de redimensionnement de l'image public void mouseDragged(MouseEvent mouseEvent) { // si clic gauche et mode Drag and Drop activé alors on bouge l'image sur l'écran if ( ((mouseEvent.getModifiers() & InputEvent.BUTTON1_MASK) != 0) && DnD){ this.setLocation(this.getX() + (mouseEvent.getX() - x)*XDnD, this.getY() + (mouseEvent.getY() - y)*YDnD); } //sinon si clic gauche alors c'est le mode de redimensionnement else if ( (mouseEvent.getModifiers() & InputEvent.BUTTON3_MASK) != 0) { // il y a une taille minimale de l'image fixée à 16*16 if (((this.getWidth() + (mouseEvent.getX() - xprec))>16)&&((this.getHeight() + (mouseEvent.getY() - yprec))>16)){ // fixe la taille de l'image suivant X et Y si ce mode est validée this.setSize(this.getWidth() + (mouseEvent.getX() - xprec)*Widthsizable, this.getHeight() + (mouseEvent.getY() - yprec)*Heightsizable); xprec = mouseEvent.getX(); yprec = mouseEvent.getY(); } } this.repaint(); } public void mouseMoved(MouseEvent mouseEvent) { } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionpublic void paint(Graphics g);mais plutôt la méthode
public void paintComponent(Graphics g);de ton composant Swing.