使用双缓冲技术呀,很多java入门书中应该都有过介绍的呀,先将要绘制的图象画到一个image上之后再将这个image画到背景上即可

解决方案 »

  1.   

    支持weixia(wx) ,不过,要注意paint 和 repaint() 的实现,
      

  2.   

    这位weixia老大,我现在没有时间去啃书本了,你能不能把这个方法说的具体一点啊 !
      

  3.   

    //DynamicImage.javaimport java.awt.*;
    import java.applet.Applet;
    import java.applet.AudioClip;public class DynamicImage extends Applet implements Runnable{
    Image mmImg;
    Thread imageThread=null;
    AudioClip bg_sound;
    int x,y;
    boolean threadRunning;
    boolean brk=true,brk2=true,brk3=true;
    Image OffScreenImage;//用来绘图的地下图片
    Graphics OffScreenGraphics;//用它的方法来绘图

    public void init(){
    mmImg=getImage(getDocumentBase(),"images/beauty.jpg");
    x=-156;y=-156;
    bg_sound=getAudioClip(getCodeBase(),"audio/spacemusic.au");
    threadRunning=true;

    OffScreenImage=createImage(size().width,size().height);
    OffScreenGraphics=OffScreenImage.getGraphics();
    }

    public void start(){
    bg_sound.loop();
    if(imageThread==null){
    imageThread=new Thread(this);
    imageThread.start();
    }
    }

    public void run(){
    while(threadRunning){
    //控制的图片移动
    if(brk==true){
    if(y==156) brk=false;
    y=y+2;
    if(brk2==true){
    x=x+2;if(x==0) brk2=false;
    }
    if(brk2==false){
    x=x-2;if(x==-156) brk2=true;
    }
    }

    if(brk==false){
    if(y==-156) brk=true;
    y=y-2;
    if(brk3==true){
    x=x+2;if(x==0) brk3=false;
    }
    if(brk3==false){
    x=x-2;if(x==-156) brk3=true;
    }
    }


    repaint();

    try{imageThread.sleep(100);}
    catch(InterruptedException e){}
    }
    }

    public void pleaseStop(){
    threadRunning=false;
    }

    public void stop(){
    if(bg_sound!=null)
    bg_sound.stop();
    }

    public void update(Graphics g){
    paint(g);
    }

    public void paint(Graphics g){
    setBackground(Color.white);
    OffScreenGraphics.drawImage(mmImg,x,y,this);
    OffScreenGraphics.drawImage(mmImg,-x,-y,this); g.drawImage(OffScreenImage,0,0,this);
    }
    }
      

  4.   

    老大,我这个不是在applet中实现的 ,而是在application中实现的啊!
    我把图片绘制到窗体设计器上时,是通过向窗体设计器上添加
    private void Form1_paint(Object source,PaintEvent e)
    {
    }
    这个方法来实现的!
      

  5.   

    我真的很感激wes109(我想飞),但是我用的是WFC控件,即:
    import com.ms.wfc.*;
    而不是用java的awt包中的东西,所以你给我的代码可能对我没有什么用,但是我还是很感激你的帮助,如果你知道怎么使用WFC控件来实现我的这个功能,还请你不吝赐教!
      

  6.   

    非常感谢各位老大的帮忙,可是我的程序是用application结合WFC控件来实现的,我开始没有说清楚是我的错,希望大家大人不计小人过还能帮我解决这个问题!如果我说话有什么不到指之处请大家原谅我,我虚心求教没有任何别的意思!