附一gif图片
http://www.javaworld.com/javaworld/jw-03-1996/animation/car.gif

解决方案 »

  1.   

    查了些资料,把原代码的b1_mouseClicked(MouseEvent e)改成如下形式(双缓冲)后,效果不错。
    "双缓冲"技术并不是没听说过,只是理解得不透彻;原以为要让自己在程序里画的图像(不是现成的图片文件)跑起来,只需开避一个此图像大小的缓冲即可,呵呵,这样换成图片了还是闪烁,真让我紧张了一把:)
    而现在把缓冲的大小定义为等于客户区,结果图像不闪了——仅仅是把缓冲改大了。
    不知道把缓冲定义得比要移动的图像大但比客户区要小又会怎么样,各位有空帮忙试一把。    void b1_mouseClicked(MouseEvent e) {
            Image bufferImg = this.createImage(300, 400);//300、400分别为Frame宽、高
            Graphics bufferG = bufferImg.getGraphics();
            Graphics g = this.getGraphics();
            int y = 100;
            int x = 0;
            int w = bufferImg.getWidth(this);
            int h = bufferImg.getHeight(this);
            for(;x < 300;) {
                x = x + 1;
                bufferG.clearRect(0, 0, w, h);
                bufferG.drawImage(img, x, y, null);
                g.drawImage(bufferImg, 0, 0, null);
                try {
                    Thread.currentThread().sleep(10);
                } catch(Exception ex) {}
            }
        }欢迎讨论、欢迎蹭分!!