画像を読み込む

広告

ここから画像ファイルを読み込んでアプレットに表示させる方法について確認していきます。

アプレットにおいて外部の画像ファイルを読み込むにはAppletクラスで用意されているgetImageメソッドを使います。

画面に表示できる Image オブジェクトを返します。引数 url には絶対 URL
を指定します。引数 name には、引数 url との相対位置を指定します。

このメソッドは、イメージがあるかどうかにかかわらず、すぐに復帰します。
アプレットが画面にイメージを描画しようとしたときに、データがロードさ
れます。イメージは少しずつ画面に描画されていきます。

パラメータ:
  url - イメージのベース位置を示す絶対 URL
  name - イメージの位置。引数 url 引数との相対位置で指定する 
戻り値:
  指定された URL にあるイメージ

指定した画像ファイルを読み込んでImageクラスのオブジェクトとして扱えるようにします。例えば画面に画像を表示するなどの処理は、Imageクラスのオブジェクトに対して行われることになります。

引数には、画像ファイルが置いてあるディレクトリ名とファイル名を指定します。ここでディレクトリ名はアプレットが設置されている場所からの相対位置指定で行えば記述が楽ですが、Appletクラスで用意されているgetCodeBaseメソッドを使うことでアプレットのクラスファイルが置かれているURLを取得することが出来ます。

このアプレットを含むディレクトリの URL である、基底 URL を取得します。

戻り値:
  このアプレットを含むディレクトリの基底 URL

似たメソッドとしてgetDocumentBaseメソッドがあります。こちらはアプレットを表示しているHTMLページが置かれているURLを取得できます。

このアプレットが組み込まれているドキュメントの URL を取得します。

戻り値:
  このアプレットを含むドキュメントの URL

サンプル

では簡単なサンプルを使ってどのような値が取得できるのか確認しておきます。

ImageTest1.java

import java.applet.Applet;
import java.net.URL;

/*
<applet code="ImageTest1.class" width="150" height="150">
</applet>
*/

public class ImageTest1 extends Applet{
  public void init(){
    URL urlCode = getCodeBase();
    URL urlDoc = getDocumentBase();

    System.out.println("Code : " + urlCode.getPath());
    System.out.println("Doc  : " + urlDoc.getPath());
  }
}

アプレットを動作させるHTMLページが置かれているディレクトリの下に「class」というディレクトリを作成し、その中にImageTest1.classファイルを配置しました。実際にブラウザでアプレットを動作させ、Javaコンソールに出力された内容を見てみると下記のようになります。

Code : /applet/image/class/
Doc  : /applet/image/ImageTest1.html

※HTMLファイルが置かれているディレクトリとは別の場所にクラスファイルを設置する場合はHTMLページ内の<applet>タグ内でcodebaseを記述する必要があります。詳しくは『ブラウザでアプレットを表示させる』を参照して下さい。

下記で実際に試す事が出来ます。

ImageTest1.html

上記のようにgetCodeBaseメソッドは、クラスファイルが設置されているURLを、そしてgetDocumentBaseメソッドはアプレットが動作するHTMLページが設置されているURLを取得する事が出来ます。

通常getImageメソッドでファイル名を指定して記述する場合は、getCodeBaseメソッドで取得したURLをベースに画像ファイルの場所を指定するようです。

例えば下記のようになります。

public class ImageTest extends Applet{
  public void init(){
    Image img = getImage(getCodeBase(), "../img/gazou.jpg");
  }
}

getImageメソッドを使う場合に注意することは、このメソッドを実行した時に、画像ファイルを完全に読み込みが終わっていなくても、次のメソッドに処理が移ってしまうことです。その為、作成したImageオブジェクトを画面に表示するなどの処理をgetImageメソッドを行ってからすぐに行うと、場合によっては画像の読み込みが完全に終わっていない状態で処理されてしまう可能性があります。対処法は後のページで詳しく見ていきます。

Imageクラス

getImageメソッドの結果として取得したImageクラスは下記のようになっています。

  • java.lang.Object
  • java.awt.Image
  • public abstract class Image extends Object

Imageクラス自体のメソッドをあまり使うことは無いので、イメージを扱うためのオブジェクトを提供してくれるクラスとだけ覚えておいて下さい。

( Written by Tatsuo Ikura )