У вас есть пара вопросов. Во-первых, в вашей функции paintComponent вы создаете локальный ArrayList of Circles. Каждый раз, когда вызывается paintComponent, вы воссоздаете эту переменную. Вместо этого просто используйте ArrayList of Circles, который принадлежит классу.
Другая проблема, с которой вы столкнулись, заключается в том, что каждый круг рисуется дважды: один раз после создания круга, другой раз в цикле for. Вы должны удалить вызов, чтобы круг нарисовал себя, и просто нарисовать их все в цикле for.
Наконец, и это может или не может быть желаемым поведением, но в настоящее время вы создаете новый круг каждый раз, когда вызывается paintComponent. Вы можете потенциально получить гораздо больше кругов, чем хотите, потому что эту функцию можно вызывать много раз. Вы можете пересмотреть вопрос о том, в какой момент создаются новые круги.
Следующее исправляет первую пару проблем.
public class MyPanel extends JPanel {
public ArrayList<Circle> circles = new ArrayList<Circle>();
public void paintComponent(Graphics g) {
Circle c = new Circle(xstart, ystart); //create a new circle
circles.add(c);
if (drawing){
for(int k=0; k<circles.size(); k++){
circles.get(k).draw(g);
}
} // draw the circle
}