import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;

class Punkt {
    private int x, y;
    static final int radie = 5;
    
    public Punkt (int x0, int y0) {
	x = x0;
	y = y0;
    }

    public void draw(Graphics g) {
	g.setColor(Color.BLACK);
        g.fillOval(x-radie, y-radie, radie*2, radie*2);
    }

    public static int sqr(int x) { 
        return x*x;
    }

    public boolean rymmer (int x1, int y1) {
        return sqr(x-x1)+sqr(y-y1) <= sqr(radie);
    }
}

class Ritpanel extends JPanel {
    
    private Collection <Punkt> punktMängd = 
	new ArrayList<Punkt>();

    public Ritpanel () {
        setBackground( Color.YELLOW );

        MusLyssnare ml = new MusLyssnare(this);
        addMouseListener (ml);
        addMouseMotionListener(ml);
    }

    public void addPunkt (Punkt p) {
	punktMängd.add(p);

    }

    public Punkt hittaPunkt(int x, int y) {
        for (Punkt p : punktMängd) {
            if (p.rymmer(x,y)) {
                return p;
            }
        }
        return null;
    }

    public boolean taBortPunkt (Punkt p) {

        return punktMängd.remove(p);
    }

    public void paintComponent (Graphics g) {
	super.paintComponent(g);

	for (Punkt p : punktMängd) {
	    p.draw(g);
	}
    }

}

class MusLyssnare extends MouseAdapter 
    implements MouseMotionListener {
    
    private Ritpanel ritpanel;

    private Punkt utvald;

    public MusLyssnare (Ritpanel p) {
        ritpanel = p;
    }

    public void mouseClicked (MouseEvent e) {
        int x = e.getX();
        int y = e.getY();

        Punkt p = ritpanel.hittaPunkt(x,y);

        if (p == null) {
            p = new Punkt(e.getX(), e.getY());
            ritpanel.addPunkt(p);
        }
        else {
            ritpanel.taBortPunkt(p);
        }
        ritpanel.repaint();
    }

    public void mousePressed (MouseEvent e) {
    }
        
    public void mouseDragged (MouseEvent e) {
    }
}        

class Punkter_3 extends JFrame {

    public Punkter_3 () {

	JPanel s = new Ritpanel();

	add(s);
	setVisible(true);
	setBounds(100, 100, 400, 400);

	setVisible(true);
	setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main (String[] arg) {

	JFrame f = new Punkter_3();
    }
}
