It will actually be doing that, just that you probably don't have a clear button to verify this. If it quickly paints over it, how will you know whether it actually re-drew or not?
If you're not sure stick a print line in the actionPerformed method of your ActionListener for the button. You will find that it will be executed each time.
You need to store the cricles,created when button is pressed, in List probably Vector/ArrayList. So that if you again press the button the new cricles are added to the list and older one are preserved. In your code the earlier cricle references are deleted when button is pressed. Code should be somewhat like this:
Actually that probably isn't it. I just resolved a very similar problem, two minutes ago - I was trying to get a Dialog to add JLabels and CheckBoxes at runtime to a JPanel. If you screen through the JPanel doc, you will notice that there is an updateUI.
Just call it at the end of each paint operation (you do extend JPanel so that should not be a problem).
Actually to be more specific, update after every action is performed. i.e in you ActionListener you should then have:
class SomeActionListener implements ActionListener{
publicvoid actionPerformed(ActionEvent evt){
// your operations...
// more of your operations....
// bored hence more operations
updateUI();
}
}