Sin ir más lejos, lo evidente:
Graphics2D g2=(Graphics2D) g;
g2
.setColor(new Color
(r
.nextInt(255),r
.nextInt(255),r
.nextInt(255))); Ellipse2D circulo
=new Ellipse2D
.Float(x
-radio, y
-radio, radio
*2, radio
*2); g2.fill(circulo);
Estás pintando 1 círculo.
Si quieres pintar 2 cídruclos, tendrás que ponerlo.
Si quieres pintar indefinidos círculos, tendrás que hacerlo con ciclos, como for.
Lo primero: ¿Trabajaste alguna vez con ArrayList, LinkedList, List o arrays? Si la respuesta es no, es lo primero, antes de mezclarlo con los gráficos.
Si ya has trabajado con alguno, entoncces la dinámica es: En el evento de click, almacenar un nuevo punto (x,y) en el array/lista. En paint(), recorrer la lista y dibujarlos todos.
Son 2 pasos bien diferenciados, obtener datos y utilizar esos datos. Empieza por ahí.
Acerca de almacenar los puntos, puedes crear una clase "Punto{ int x; inty; }".