package test;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class A1 extends JFrame {
public static void main(String[] args) {
new A1();
}
A1() {
this.setSize(700, 500);
this.setLocation(300, 100);
this.setResizable(false);// 窗口可调尺寸(假)
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
Myqiu m = new Myqiu();
this.add(m);
m.move1(); // 这里不对?怎么不能用this.move1();
}
}
class Myqiu extends JPanel { // 球类,画球,球移动
double x = 100;
double y = 100;
public void paint(Graphics g) { // 画圆球
// 在这里加入一行代码
super.paint(g);
g.setColor(Color.black);
g.fillOval((int) x, (int) y, 30, 30);
}
public void move1() { // 球体移动
while (true) {
try {
Thread.sleep(30);
} catch (InterruptedException e) {
e.printStackTrace();
}
x += 10;
this.repaint(); // 重画
}
}
}
你的程序中,少写了一行代码!就是在paint()方法内,写入super.paint(g);改后,测试正常.
主要原因就是你不停的在面板上面画圆,然后你画第二个的时候,第一个圆还在上面,所以无限的圆连起来就看见像个圆柱了,所以你简单的改一下,每次画圆之前都清空当前画布,就可以有运动的效果了
public void paint(Graphics g) { // 画圆球
g.clearRect(0, 0, 700, 500);
g.setColor(Color.black);
g.fillOval((int) x, (int) y, 30, 30);
}
在paint()方法第一行加上super.paint(g);