今回は、アプレットなどで画像が表示される前に「Now Loading」などが書かれている時が あると思います。あの原理について説明をしてみたいと思います。まあ、そんなに時間が かかる画像を表示させることはないと思いますが…。
まず、画像のロードの監視をするために使うクラスはMediaTrackerクラスです。 どのようにして使うかというと…。
MediaTracker mediatracker = new MediaTracker(this);
とします。これでMediaTrackerクラスは使えるようになります。その後、MediaTrackerクラス に監視できるように、イメージを登録しておきます。そして、目印にIDを付けて制御を します。例えば…。
image=getImage(getDocumentBase(),"image.jpg"); mediatracker.addImage(image,0);//()の中は登録するImageクラスのオブジェクト,IDの順番
このように、IDを登録しておけば画像の監視ができるようになります。画像でなくても アニメーションのプログラミング等でも使うことができます。例えば、imageに色々な画像 を描いておいてそれを表示する際にこのMediaTrackerクラスを使って監視をしてやると できると思います。とりあえず、例として、画像読みこみテストプログラムを作ってみましょう
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
class rframe extends Frame
{
Image image;
MediaTracker mt;
boolean flag=false;
rframe()
{
mt=new MediaTracker(this);//MediaTrackerクラスの宣言
image = createImage(800,800);
image=Toolkit.getDefaultToolkit().getImage("image.jpg");//画像の読みこみ
mt.addImage(image,0);
try{
mt.waitForAll();//登録した全ての画像を監視する
}
catch(Exception ex){}
}
public void paint(Graphics g)
{
if(mt.isErrorID(0)){
g.drawString("Loading Error",100,100);//画像の読みこみエラー
}
if(!mt.checkID(0)){
g.drawString("Loading......",100,100);//現在画像を読みこんでいる時
}
else
g.drawImage(image,0,0,this);//画像の読みこみが終了したら表示
}
}
public class tifread2
{
public static void main(String[] args)
{
rframe f = new rframe();
f.setTitle("画像読みこみ");
f.setSize(800,800);
f.addWindowListener(new WindowAdapter(){public void
windowClosing(WindowEvent e){System.exit(0);}});
f.setVisible(true);
}
}
実行していて気づいたかもしれませんが、これはアプリケーションでのテストです。アプレット でやりたい場合でもほとんど同じです。しかし、その場合のプログラムは自分で考えてみましょう 結局やっていることは同じですから…。