Java tutorial
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); } }