Java tutorial
import java.awt.Container; import java.awt.Cursor; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class MouseDragActionPanel extends JPanel implements MouseMotionListener { private static final int SquareWidth = 10; private static final int Max = 100; private Rectangle[] squares = new Rectangle[Max]; private int squareCount = 0; private int currentSquareIndex = -1; public MouseDragActionPanel() { addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); currentSquareIndex = getSquare(x, y); if (currentSquareIndex < 0) // not inside a square add(x, y); } public void mouseClicked(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); if (evt.getClickCount() >= 2) { remove(currentSquareIndex); } } }); addMouseMotionListener(this); } public void paintComponent(Graphics g) { super.paintComponent(g); for (int i = 0; i < squareCount; i++) ((Graphics2D) g).draw(squares[i]); } public int getSquare(int x, int y) { for (int i = 0; i < squareCount; i++) if (squares[i].contains(x, y)) return i; return -1; } public void add(int x, int y) { if (squareCount < Max) { squares[squareCount] = new Rectangle(x, y, SquareWidth, SquareWidth); currentSquareIndex = squareCount; squareCount++; repaint(); } } public void remove(int n) { if (n < 0 || n >= squareCount) return; squareCount--; squares[n] = squares[squareCount]; if (currentSquareIndex == n) currentSquareIndex = -1; repaint(); } public void mouseMoved(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); if (getSquare(x, y) >= 0) setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR)); else setCursor(Cursor.getDefaultCursor()); } public void mouseDragged(MouseEvent evt) { int x = evt.getX(); int y = evt.getY(); if (currentSquareIndex >= 0) { Graphics g = getGraphics(); g.setXORMode(getBackground()); ((Graphics2D) g).draw(squares[currentSquareIndex]); squares[currentSquareIndex].x = x; squares[currentSquareIndex].y = y; ((Graphics2D) g).draw(squares[currentSquareIndex]); g.dispose(); } } public static void main(String[] args) { JFrame frame = new JFrame(); frame.setTitle("MouseTest"); frame.setSize(300, 200); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); Container contentPane = frame.getContentPane(); contentPane.add(new MouseDragActionPanel()); frame.show(); } }