日期:2014-05-20  浏览次数:20689 次

关于graphics的一个小问题,大家进来帮我看看。。。
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;
}
}
}

}


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

------解决方案--------------------
出现这个问题的原因是你重写的paint方法没有调用父类的paint方法及时清除屏幕,g.drawImage(image, movex, 50, 60, 60, this);方法之前添加一句
Java code
super.paint(g);