public class A extends
Frame{ // JFrame 与Frame
int x=50;
int y=50;
@Override
public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.blue);
g.fillOval(x, y, 20, 20);
g.setColor(c);
y+=5;
}
public void b(){
this.setLocation(400,150);
this.setBackground(Color.green);
this.setSize(800, 600);
this.setVisible(true);
this.setResizable(false);
//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
new Thread(new Th()).start();
}
public static void main(String[] args) {
A a = new A();
a.b();
}
class Th implements Runnable {
public void run() {
while(true){
repaint();
try {
Thread.sleep(200);
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
int x=50;
int y=50;
@Override
public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.blue);
g.fillOval(x, y, 20, 20);
g.setColor(c);
y+=5;
}
public void b(){
this.setLocation(400,150);
this.setBackground(Color.green);
this.setSize(800, 600);
this.setVisible(true);
this.setResizable(false);
//this.setDefaultCloseOperation(EXIT_ON_CLOSE);
new Thread(new Th()).start();
}
public static void main(String[] args) {
A a = new A();
a.b();
}
class Th implements Runnable {
public void run() {
while(true){
repaint();
try {
Thread.sleep(200);
} catch (Exception e) {
// TODO: handle exception
}
}
}
}
}
这段代码是画一个小球不断的运动。
在 JFrame与Frame中效果是不同的。
在Frame中效果如下:
在JFrame中效果如下:
小球变成了一条线.
导致这两种的结果的原因是:
在快画出来的时候,也就是在调用陪paint()方法之前,Frame重画了面板(也就是调用了update() ),使小球走过的痕迹被抹掉,而JFrame没有重画面板,留下了小球走过的痕迹,也就留下了长长的一条尾巴。
欢迎大家来一起讨论。
此为个人记录,如有雷同,不胜荣幸。