请教JFrame和Frame的区别

比如我想做一个小动画,让球在移动。用paint和线程,不断重画,然后我发现用Frame可以成功实现。但是用JFrame却会出现出现新的球,原来的球还在,即可以看到几个球。。这是为什么

 public void paint(Graphics g) {
    Color c=g.getColor();
    g.setColor(new Color(122,122,123));
    g.fillOval(x, y, 50, 50);
    g.setColor(c);
    y+=50;

}   
改成
public void paint(Graphics g) {
   super.paint(g);//frame会隐藏清屏,jframe不会清除上一帧动作。
    Color c=g.getColor();
    g.setColor(new Color(122,122,123));
    g.fillOval(x, y, 50, 50);
    g.setColor(c);
    y+=50;

}   

J开头的像JFrame、JButton都是swing下的,Frame、Button都是awt下的,而swing是awt的升级版。

package h1;

import java.awt.Color;
import java.awt.Container;
import java.awt.Frame;
import java.awt.Graphics;

import javax.swing.JFrame;

public class Tank extends JFrame{
public static final int GAME_WIGH=800,GAME_HIGH=600;
int x=30,y=50;

public void paint(Graphics g) {
    Color c=g.getColor();
    g.setColor(new Color(122,122,123));
    g.fillOval(x, y, 50, 50);
    g.setColor(c);
    y+=50;

}   
public void launchFrame(){
    setBounds(300, 100, GAME_WIGH, GAME_HIGH);

    setVisible(true);
    setResizable(false);
    setTitle("坦克大战1.0");
    Thread thread=new Thread(new TThread());
    thread.start();
}

public static void main(String[] args) {
    Tank tank=new Tank();
    tank.launchFrame();

}
private class TThread implements Runnable {

    public void run() {
    while(true){
        repaint();
            try {
            Thread.sleep(200);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }   
  }
}

}
比如这个例子 把Frame改为JFrame会出现不同效果,另外,用JFrame时设置背景颜色再加上paint之后就不管用了 这都是为什么 求指教

之所以会有好几个球是因为线程重画还没有完成,可以设置成在虚拟画布上画出来之后,统一显示在窗口上