画像を切り替える

広告

このアプレットは、3枚の画像ファイルを用意し、4秒毎に切り替えて表示するようにしてみます。下記で実際に試して頂けます。

アプレット:画像ファイルを切り替える

実際に実行すると下記のような感じになります。

画像ファイルを切り替え

画像ファイルを切り替え

runメソッド内のループ内で表示させる画像のNoを変更させています。

public void run(){
  while(true){
    /* 表示する画像ファイルのNoを設定 */
    picNo += 1;
    if (picNo >= 3){
      picNo = 0;
    }
  }
}

paintメソッドが呼び出された時に設定されている画像ファイルのNoを参照して、表示する画像を指定しています。

public void paint(Graphics g){
  /* 画像ファイルをバッファに描画 */
  buffer.drawImage(img[picNo], 0, 0, this);
}

サンプル

下記が全てのソースファイルです。

Sample1.java

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.MediaTracker;

public class Sample1 extends Applet implements Runnable{
  Image img[];
  MediaTracker tracker;

  Thread thread = null;

  int picNo;

  Dimension size;
  Image back;
  Graphics buffer;

  public void init(){
    tracker = new MediaTracker(this);

    /* 画像ファイルを読み込む */
    img = new Image[3];
    for (int i = 0 ; i < 3 ; i++){
      String file = "../img/pic" + (i + 1) + ".png";
      img[i] = getImage(getCodeBase(), file);
      tracker.addImage(img[i], i);
    }

    picNo = 0;

    /* ダブルバッファ用 */
    size = getSize();
    back = createImage(size.width, size.height);
    buffer = back.getGraphics();

    /* 新しいスレッドを作成し開始する */
    thread = new Thread(this);
    thread.start();
  }

  public void start(){
    try {
      tracker.waitForAll();
    } catch (InterruptedException e) {
    }
  }

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

  public void paint(Graphics g){
    /* アプレットの大きさと同じ画像を表示するため下記は実際は不要 */
    buffer.setColor(getBackground());
    buffer.fillRect(0, 0, size.width, size.height);

    /* 画像ファイルをバッファに描画 */
    buffer.drawImage(img[picNo], 0, 0, this);

    g.drawImage(back, 0, 0, this);
  }

  public void run(){
    while(true){
      /* 表示する画像ファイルのNoを設定 */
      picNo += 1;
      if (picNo >= 3){
        picNo = 0;
      }

      repaint();

      /* 4000ミリ秒待機する */
      try{
        Thread.sleep(4000);
      }catch (InterruptedException e){
      }
    }
  }
}

( Written by Tatsuo Ikura )