import java.awt.*; import javax.swing.*; import java.awt.event.*; class Canvas extends JComponent { class Circle { float x, y, r; Color col; } java.util.Vector circles = new java.util.Vector(); Circle current; public Canvas() { setOpaque(true); setBackground(Color.white); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { current = new Circle(); current.x = e.getX(); current.y = e.getY(); current.col = CirclePaint.colorChooser.getColor(); } public void mouseReleased(MouseEvent e) { if(current!=null) circles.add(current); } public void mouseExited(MouseEvent e) { current = null; } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { if(current==null) return; current.r = (float)Math.sqrt( (e.getX() - current.x) * (e.getX() - current.x) + (e.getY() - current.y) * (e.getY() - current.y)); repaint(); } }); } public void paintComponent(Graphics g) { g.clearRect(0, 0, this.getWidth(), this.getHeight()); for(Circle c : circles) { g.setColor(c.col); ((Graphics2D)g).fill((Shape)new java.awt.geom.Ellipse2D.Float( c.x-c.r, c.y-c.r, 2*c.r, 2*c.r)); } if(current!=null) { g.setColor(current.col); ((Graphics2D)g).fill((Shape)new java.awt.geom.Ellipse2D.Float( current.x-current.r, current.y-current.r, 2*current.r, 2*current.r)); } }} public class CirclePaint { public static JColorChooser colorChooser = new JColorChooser(); public static void main(String[] args) { JFrame frame1 = new JFrame("Choose the Color"); frame1.setSize(450, 260); frame1.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); frame1.getContentPane().add(colorChooser); frame1.setVisible(true); JFrame frame2 = new JFrame("Draw Circles Here"); frame2.setSize(300, 300); frame2.getContentPane().add(new Canvas()); frame2.setVisible(true); } }