Q: Removing a circle from JFrame I am creating a Towers of Hanoi game and have sucedded in printing the shapes with a time delay (that part of the code has been removed while I try to get all the ovals where they are supposed to be) I am wondering how I would go about removing the circle. As you can see I have tried the clearRect(); method but that doesn't work. Is there a way I can set if the method is visible on JPanel since each circle has its own method? I think that would be the easiest way but if anyone has a better idea go for it! Thanks for any help and I have attached my code
package towersofhanoi;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.Object;
/*g.fillOval(60 = horizontal distance , 540= vertical distance, 400 = width, 60 = height) */
public class TowersOfHanoi extends JPanel {
private int clock = 0;
private Color circles = new Color(176, 56, 251);

public static void main(String[] args) {
    // Print the shapes and frame
    TowersOfHanoi drawRectangle = new TowersOfHanoi();
    JFrame frame = new JFrame("Towers of Hanoi");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(drawRectangle);
    frame.setSize(1250, 800);
    frame.setVisible(true);

    Timer timer = new Timer(1000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            drawRectangle.nextFrame();
            drawRectangle.repaint();
        }
    });
    timer.setRepeats(true);
    timer.start();
}

public void nextFrame() {
    clock++;
}

public void paintComponent(Graphics g) {
    super.paintComponent(g);
    frame1(g);
    frame2(g);
    frame3(g);
    frame4(g);
    frame5(g);
    frame6(g);
    frame7(g);
    frame8(g);
    frame9(g);

}

private Color frame1(Graphics g) {
    Color pegs = new Color(251, 129, 56);
    g.setColor(pegs);

    // peg 1
    g.fillRect(250, 300, 25, 450);
    // peg 2
    g.fillRect(600, 300, 25, 450);
    // peg 3
    g.fillRect(950, 300, 25, 450);
    // bottom
    g.fillRect(200, 700, 825, 50);
    // create a color for circles
    // cirle 7 (Labeled from bottom to top)
    g.setColor(circles);
    g.fillOval(60, 640, 400, 60);
    g.setColor(Color.BLACK);
    g.drawOval(60, 640, 400, 60);
    return circles;
}

private void frame2(Graphics g) {
    // circle 6
    g.setColor(circles);
    g.fillOval(85, 580, 350, 60);
    g.setColor(Color.BLACK);
    g.drawOval(85, 580, 350, 60);
}

private void frame3(Graphics g) {
    // circle 5
    g.setColor(circles);
    g.fillOval(110, 520, 300, 60);
    g.setColor(Color.BLACK);
    g.drawOval(110, 520, 300, 60);
}
private void frame4(Graphics g) {
    // circle 4
    g.setColor(circles);
    g.fillOval(135, 465, 250, 55);
    g.setColor(Color.BLACK);
    g.drawOval(135, 465, 250, 55);
}
private void frame5(Graphics g) {
    // circle 3
    g.setColor(circles);
    g.fillOval(160, 420, 200, 45);
    g.setColor(Color.BLACK);
    g.drawOval(160, 420, 200, 45);
}
private void frame6(Graphics g) {
    // circle 2
    g.setColor(circles);
    g.fillOval(185, 380, 150, 40);
    g.setColor(Color.BLACK);
    g.drawOval(185, 380, 150, 40);
}
private void frame7(Graphics g) {
    // circle 1
    g.setColor(circles);
    g.fillOval(210, 345, 100, 35);
    g.setColor(Color.BLACK);
    g.drawOval(210, 345, 100, 35);
}
public void frame8(Graphics g) {
    g.clearRect(210, 345, 100, 35);
    g.setColor(circles);
    g.fillOval(560, 665, 100, 35);
    g.setColor(Color.BLACK);
    g.drawOval(560, 665, 100, 35);
}
public void frame9(Graphics g) {
    g.clearRect(185, 380, 150, 40);
    g.setColor(circles);
    g.fillOval(890, 660, 150, 40);
    g.setColor(Color.BLACK);
    g.drawOval(890, 660, 150, 40);


}


}


A: 
I am wondering how I would go about removing the circle.

The super.paintComponent(...) will clear the painting on the panel so that is all the is needed.

As you can see I have tried the clearRect();

It is not needed (see my comment above), but then you invoke the fillOval(...) and drawOval(...) methods again so the painting is redone. So the code is doing exactly as you asked it to do.

Is there a way I can set if the method is visible on JPanel 

You need a Boolean indicator telling the paint method what to do. Something like:
if (paintOval1)
   frame1(g);
if (paintOval2)
   frame2(g);

Of course that is approach is very brute force and not a very good approach if for say you have 100 circles to paint. The code become too big.
So, instead you should create a custom class that contains four properties (x, y, width, height, isPainted). Then you create an instance of this class for each circle and add the class to an ArrayList. Something like:
ArrayList<CustomClass> circles = new ArrayList<CustomClass>();
circles.add( new CustomClass(60, 640, 400, 60, true) );
circles.add( new CustomClass(85, 580, 350, 60, true) );

Then in the paintCompnent() method your code becomes simpler:
for (CustomClass circle: circles.get)
{
    if (circle.isPainted())
    {
        g.setColor(...);
        g.fillOval(circle.getX(), circle,getY(), circle.getWidth(), circle.getHeight());
        ...
    }
}

Finally you would need a method to change the state of painting a circle. Something like:
pubic void setCirclePainted(int circle, Boolean isPainted)
{
    CustomClass circle = circles.get(circle);
    circle.setPainted( isPainted );
}

So the key for you is to create your "CustomClass" and give it a proper name. Then you need to implement all the getter/setter methods of the class so you can access the properties of the class.

A: I actually found that the easiest way for me to understand and do was to use else and else if statements to display the shape based on time. Thanks for the other suggestions though!
    public void paintComponent(Graphics g) {
    super.paintComponent(g);
    frame1(g);
    frame2(g);
    frame3(g);
    frame4(g);

    if (clock<= 5) {
       frame5(g);
    }
    else if(clock >= 6) {
       frame9(g);
    }
    frame6(g);
    frame7(g);
    frame8(g);


}

