import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D;
import java.util.Collection;
import java.util.LinkedList;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.Timer;
public class CirclePainter extends JFrame{
private PaintPanel panel;
public CirclePainter() {
panel = new PaintPanel();
panel.setPreferredSize(new Dimension(800,600));
panel.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
panel.addShape(new Ellipse2D.Double(e.getX(),e.getY(), 10 , 10), 3000);
}
});
add(panel);
}
public static void main(String[] args) {
CirclePainter frame = new CirclePainter();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
class PaintPanel extends JComponent
{
private Collection<Shape> shapes = new LinkedList<Shape>();
@Override
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D)g;
super.paintComponent(g);
for (Shape shape : shapes) {
g2d.draw(shape);
}
}
public void addShape(final Shape shape, int timeToLive)
{
shapes.add(shape);
Timer timer = new Timer(timeToLive, new ActionListener() {
public void actionPerformed(ActionEvent e) {
shapes.remove(shape);
repaint();
}
});
timer.start();
Rectangle extendedBounds = new Rectangle(shape.getBounds());
extendedBounds.grow(1, 1);
repaint(extendedBounds);
}
}