WisdomSoft - for your serial experiences.

5.13 イメージの読み込み

アプリケーションでストレージから画像ファイルを読み込むには Toolkit クラスを用います。

5.13.1 ツールキット

Swing アプリケーションを開発しようとすると、アプレットを使ってイメージを読み込むという方法を利用することができなくなってしまいます。Applet クラスには指定した URL からイメージを読み込む getImage() メソッドが定義されていましたが、アプリケーションが継承するのは Frame クラスや Window クラスなので getImage() メソッドが使えません。

アプリケーションがディスクや URL からイメージを取得するには、アプレットの代わりに AWT の java.awt.Toolkit クラスを使います。Toolkit クラスは本来、システムに依存しないクラスと、システムに依存するピアの関係クラスを結びつけるためのもので、ほとんどのメソッドはアプリケーションにとって関係のあるものではありません。

java.awt.Toolkit クラス
java.lang.Object
  |
  +--java.awt.Toolkit
public abstract class Toolkit extends Object

Toolkit クラスは抽象クラスなので、直接インスタンスかすることはできません。このクラスのインスタンスを取得するには Component クラスの getToolkit() メソッドを使います。

Component クラス getToolkit() メソッド
public Toolkit getToolkit()

Component クラスのインスタンスを保有していない場合、ToolKit クラスの getDefaultToolkit() メソッドから取得する手段もあります。この場合はシステムデフォルトのツールキットを得ることができます。

ToolKit クラス getDefaultToolkit() メソッド
public static Toolkit getDefaultToolkit()

Toolkit クラスの実装を取得することができれば、このクラスの createImage() メソッドまたは getImage() メソッドを使って、指定したパスからイメージを読み込むことができます。createImage() メソッドは常に新しいインスタンスとしてイメージを独立したメモリに読み込みますが、getImage() は与えられたパスのイメージがすでにメモリに存在する場合、できる限り共有しようと試みます。

ToolKit クラス createImage() メソッド
public abstract Image createImage(String filename)
public abstract Image createImage(URL url)
public abstract Image createImage(ImageProducer producer)
public Image createImage(byte[] imagedata)
public abstract Image createImage(byte[] imagedata, int imageoffset, int imagelength)
ToolKit クラス getImage() メソッド
public abstract Image getImage(String filename)
public abstract Image getImage(URL url)

これらのメソッドが扱えるイメージの形式は JPEG、GIF、PNG のいずれかです。createImage() メソッドはパスからだけではなく、メモリ上に読み込まれたイメージデータからイメージを生成することができるという点も重要です。

コード1
import javax.swing.*;
import java.awt.*;

public class Test extends JComponent {
	public static void main(String args[]) {
		JFrame win = new JFrame();
		win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		win.setBounds(10 , 10 , 400 , 300);
		win.getContentPane().add(new Test());
		win.show();
	}

	private Image image;
	public Test() {
		Toolkit toolkit = getToolkit();
		image = toolkit.getImage("test.jpg");
	}
	public void paintComponent(Graphics g) {
		g.drawImage(image , 0 , 0 , getWidth() , getHeight() , this);
	}
}
実行結果
コード1 実行結果

コード1は、アプレットを使わない代わりに Toolkit クラスを使って Image オブジェクトを取得するプログラムです。このプログラムでは、プログラムが起動されたカレントディレクトリから test.jpg という名前のイメージファイルを読み込んでいます。