import java.awt.*;
import java.awt.event.*;
import javax.swing.*;public class TestGraphics_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
        new Graphics_1();
}}
class Graphics_1 extends JFrame implements Runnable{
private Image image;
private int movex=0;
private Thread t;
Graphics_1(){
setTitle("Test Graphics");
setVisible(true);
setSize(new Dimension(400,300));
setLocation(100,100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

image=Toolkit.getDefaultToolkit().getImage("D:/1.gif");
init();
}
public void init(){
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
JOptionPane.showConfirmDialog(Graphics_1.this, "确定要退出", "退出", JOptionPane.INFORMATION_MESSAGE);
}
});
t=new Thread(this);
t.start();
}
public void paint(Graphics g){
g.drawImage(image, movex,50,60, 60, this);
}
public void update(Graphics g){
paint(g);
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
try{
t.sleep(100);
}catch(Exception e){}
if(movex+image.getWidth(this)<getSize().width){
                         movex+=2;
            repaint();
}else{
break;
}
}
}

}
  由于上传不了最后运行结果的图片,只能说说了。
最后得到的结果就是 物体在移动过程中后面留有很多残影。这是怎么回事?请各位高手帮帮忙,小弟在此谢过了。。

解决方案 »

  1.   

    出现这个问题的原因是你重写的paint方法没有调用父类的paint方法及时清除屏幕,g.drawImage(image, movex, 50, 60, 60, this);方法之前添加一句
    super.paint(g);
    整个代码import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class TestGraphics_1 {
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    new Graphics_1();
    }}class Graphics_1 extends JFrame implements Runnable {
    private Image image;
    private int movex = 0;
    private Thread t; Graphics_1() {
    setTitle("Test Graphics");
    setVisible(true);
    setSize(new Dimension(400, 300));
    setLocation(100, 100);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); image = Toolkit.getDefaultToolkit().getImage("D:/1.gif");
    init();
    } public void init() {
    addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    JOptionPane.showConfirmDialog(Graphics_1.this, "确定要退出", "退出",
    JOptionPane.INFORMATION_MESSAGE);
    }
    });
    t = new Thread(this);
    t.start();
    } public void paint(Graphics g) {
    super.paint(g);
    g.drawImage(image, movex, 50, 60, 60, this);
    } public void update(Graphics g) {
    paint(g);
    } @Override
    public void run() {
    // TODO Auto-generated method stub
    while (true) {
    try {
    t.sleep(100);
    } catch (Exception e) {
    }
    if (movex + image.getWidth(this) < getSize().width) {
    movex += 2;
    repaint();
    } else {
    break;
    }
    }
    }}
      

  2.   

    楼上说的对,每次repaint前都清除已画内容,然后再画