animateimagenoflicker.java

来自「Java 入门书的源码」· Java 代码 · 共 75 行

JAVA
75
字号
//Copyright (c) 1998, Arthur Gittleman
//This example is provided WITHOUT ANY WARRANTY either expressed or implied.

/* Modifies Example 11.8 to use double buffering
 * to eliminate the flicker.
 */

import java.awt.*;
import java.applet.Applet;
import java.net.*;

public class AnimateImageNoFlicker extends Applet implements Runnable {
  private boolean done;
  private Image pic;
  private int imageWidth, imageHeight;
  private Image buffer;
  private Graphics bufferGraphics;
  private MediaTracker tracker;
  private boolean ready = false;

  public void init() { 
    pic = getImage(getDocumentBase(),"gittleman.gif");
    tracker = new MediaTracker(this);
    tracker.addImage(pic, 0);
    buffer = createImage(getSize().width,getSize().height);
    bufferGraphics = buffer.getGraphics();
  }    
  public void start() {
    done = false;
    Thread t = new Thread(this);
    t.start();
  }
  public void stop() {
    done = true;
  }
  public void update(Graphics g) {
    paint(g);
  }    
  public void paint(Graphics g) {
    if (ready) {
      bufferGraphics.clearRect(0,0,getSize().width,getSize().height);
      bufferGraphics.drawRect(8,8,imageWidth+3,imageHeight+3);

      bufferGraphics.drawImage(pic,10,10,imageWidth,imageHeight,null);
      g.drawImage(buffer,10,10,null);
    }
    else
      g.drawString("loading Image",30,30);
  }
  public void run() {
    try { 
      tracker.waitForID(0); 
    }catch (InterruptedException e) {
      e.printStackTrace();
    }
    imageWidth = pic.getWidth(null);
    imageHeight = pic.getHeight(null);
    ready = true;
    int dx=20, dy=5;
    while (true) {
      for(int i=0; i<10; i++) {
        if (done) return;
        imageWidth += dx;
        imageHeight += dy;
        repaint();  
        try {
          Thread.sleep(300);
        }catch(InterruptedException e) {
           e.printStackTrace();
        } 
      }
      dx = -dx; dy = -dy; 
    }
  }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?