import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class TankClient extends JFrame {   //此处改为Frame就可以重画
private int x = 50; private int y = 50; public TankClient() {
super("Tank War");
this.setSize(400, 400);
this.setLocation(200, 200);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.setResizable(false);
new Thread(new PaintTank()).start();
this.setVisible(true);
} public void paint(Graphics g) {
g.setColor(Color.red);
g.fillOval(x, y, 30, 30);
x += 25;
y += 25;
} public static void main(String[] args) {
TankClient tc = new TankClient();
} private class PaintTank implements Runnable {
public void run() {
while (true) {
repaint();       //时不时此处的repaint因为是属PaintTank的缘故?
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}为何改为用awt就可以重画了,现在是原来的还在,新的也能画出,真不知是为什么

解决方案 »

  1.   

    public void paint(Graphics g) {
            g.setColor(Color.red);
            g.fillOval(x, y, 30, 30);
            x += 25;
            y += 25;
        }改成public void paintComponent(Graphics g) {
            g.setColor(Color.red);
            g.fillOval(x, y, 30, 30);
            x += 25;
            y += 25;
        }
      

  2.   

    楼顶的代码我在jdk1.4 1.5 1.6 上测试都是可以重画的啊,
    你要是只要求画新的,就加一句
        public void paint(Graphics g) {
         super.paint(g);
            g.setColor(Color.red);
            g.fillOval(x, y, 30, 30);
            x += 25;
            y += 25;
        }
      

  3.   

        protected void paintComponent(Graphics g) {
            g.setColor(Color.red);
            g.fillOval(x, y, 30, 30);
            x += 25;
            y += 25;
        }
      

  4.   

    楼主我跟你遇到一样的问题,这个程序原来是用AWT的吧,改用JFrame后前一次画的没擦掉,我重写paintComponent后什么都画不出来了,希望大家指导一下