イメージファイルを読み込んで表示する。 |
イメージ読み込みの手順
では、イメージファイルを読み込んで表示する手順について説明をしていきましょう。といっても、これはそれほど複雑ではありません。コンストラクタで読み込みを行い、paintで描画をしているだけです。
1.イメージファイルの読み込み
img = Toolkit.getDefaultToolkit().getImage("image.jpg");
もっともスタンダードなイメージファイルの読み込み方法は、「Toolkit」というクラスにある機能を利用するものです。このToolkitは、ネイティブ環境(Java仮想マシンの環境でなく、それが動いているOSなどの環境)と、Java仮想マシン環境との間の橋渡しをする機能を提供するクラスです。
このToolkitを利用する場合には、まず「getDefaultToolkit」というメソッドを使って、デフォルトで設定されているToolkitインスタンスを取得します。そして、そのインスタンス内にあるメソッドを呼び出します。イメージファイルの読み込みは、「getImage」というメソッドを使います。これは引数に指定した名前のイメージファイルを読み込み、それを「Image」クラスのインスタンスとして返すものです。
Imageクラスは、ビットマップイメージを扱う際の基本となるクラスです。これはビットマップによるイメージのデータを管理し、そのイメージに関する情報(大きさなど)を調べたりする機能が用意されています。(AWTには、このImageの他に、イメージバッファを持つBufferedImageというクラスがありますが、これはこの後で登場します)
2.イメージの描画
g.drawImage(img,0,0,this);
イメージの描画は、Graphicsクラスにある「drawImage」というメソッドを使います。これは、引数の異なるものが何種類か用意されていますが、ここではもっとも単純な「位置を指定して描く」というものを使っています。引数の値は、それぞれ以下のようになります。
第1引数――描くImageインスタンス
第2、3引数――描く横位置、縦位置のint値
第4引数――イメージ・オブザーバー
ちょっとわかりにくいのは、第4引数の「イメージ・オブザーバー」というものでしょう。これは、イメージの読み込み状態などを管理するオブジェクトです。イメージというのは、読み込みに時間がかかるものです。まぁ、ファイルから読み込むならそれほどかかりませんが、読み込むファイルサイズが非常に大きかったり、あるいはネットワークを経由してダウンロードしたりすると、どうしても時間がかかります。そこで、読み込み状況などをイメージ・オブザーバーに通知し、そこで管理できるようになっているのです。
このイメージ・オブザーバーは、ImageObserverというインターフェイスとして用意されています。が、実をいえばこれはAWTのコンポーネント類であれば、最初からimplements済みなのです。したがって、AWTのコンポーネントのどれかを指定すればいいのですね。通常は、Frameを継承してクラスを定義していますから、thisでこのFrame自身を指定しておくのが一般的です。
アプレットの場合は?
Toolkitを使った読み込みは、アプリケーションの場合の基本ですが、実をいえばアプレットの場合にはこのやり方は使えないので注意が必要です。アプレットは、Appletクラスにイメージ読み込みの専用メソッドがあるので、そちらを使う必要があります。
Image 変数 = getImage(getDocumentBase(), ファイル名 );
getImageの使い方にはいくつかのやり方がありますがもっとも基本的なのはこの書き方でしょう。getImageでは、第1引数にファイルがある場所のURLインスタンス、第2引数にファイル名を指定して読み込みを行います。
第1引数の「URL」インスタンスというのは、ネットワークなどでURLのアドレスを指定するのに使われるクラスなのですが、ここでは「getDocumentBaseというメソッドを指定する」と覚えてしまいましょう。getDocumentBaseは、アプレットを表示するHTMLファイルがある場所のURLインスタンスを返すメソッドです。これを第1引数に指定し、第2引数にファイル名を指定すれば、HTMLファイルがある場所から指定のファイル名のイメージを読み込み、変数に設定します。