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();
}
}