Mega Code Archive

 
Categories / Java / 2D Graphics GUI
 

Repaint just the affected part of the component

import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import javax.swing.JComponent; import javax.swing.JFrame; public class ClippedDragImage extends DragImage {   int oldX, oldY;   public ClippedDragImage(Image i) {     super(i);   }   public void mouseDragged(MouseEvent e) {     imageX = e.getX();     imageY = e.getY();     Rectangle r = getAffectedArea(oldX, oldY, imageX, imageY, imageWidth, imageHeight);     repaint(r); // repaint just the affected part of the component     oldX = imageX;     oldY = imageY;   }   private Rectangle getAffectedArea(int oldx, int oldy, int newx, int newy, int width, int height) {     int x = Math.min(oldx, newx);     int y = Math.min(oldy, newy);     int w = (Math.max(oldx, newx) + width) - x;     int h = (Math.max(oldy, newy) + height) - y;     return new Rectangle(x, y, w, h);   }   public static void main(String[] args) {     String imageFile = "A.jpg";     Image image = Toolkit.getDefaultToolkit().getImage(         ClippedDragImage.class.getResource(imageFile));     image = image.getScaledInstance(imageWidth, imageHeight, Image.SCALE_DEFAULT);     JFrame frame = new JFrame("ClippedDragImage");     frame.getContentPane().add(new ClippedDragImage(image));     frame.setSize(300, 300);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.setVisible(true);   } } class DragImage extends JComponent implements MouseMotionListener {   static int imageWidth = 60, imageHeight = 60;   int grid = 10;   int imageX, imageY;   Image image;   public DragImage(Image i) {     image = i;     addMouseMotionListener(this);   }   public void mouseDragged(MouseEvent e) {     imageX = e.getX();     imageY = e.getY();     repaint();   }   public void mouseMoved(MouseEvent e) {   }   public void paint(Graphics g) {     Graphics2D g2 = (Graphics2D) g;     g2.drawImage(image, imageX, imageY, this);   } }