5.13 イメージの読み込み
5.13.1 ツールキット
Swing アプリケーションを開発しようとすると、アプレットを使ってイメージを読み込むという方法を利用することができなくなってしまいます。Applet クラスには指定した URL からイメージを読み込む getImage() メソッドが定義されていましたが、アプリケーションが継承するのは Frame クラスや Window クラスなので getImage() メソッドが使えません。
アプリケーションがディスクや URL からイメージを取得するには、アプレットの代わりに AWT の java.awt.Toolkit クラスを使います。Toolkit クラスは本来、システムに依存しないクラスと、システムに依存するピアの関係クラスを結びつけるためのもので、ほとんどのメソッドはアプリケーションにとって関係のあるものではありません。
java.lang.Object | +--java.awt.Toolkit
public abstract class Toolkit extends Object
Toolkit クラスは抽象クラスなので、直接インスタンスかすることはできません。このクラスのインスタンスを取得するには Component クラスの getToolkit() メソッドを使います。
public Toolkit getToolkit()
Component クラスのインスタンスを保有していない場合、ToolKit クラスの getDefaultToolkit() メソッドから取得する手段もあります。この場合はシステムデフォルトのツールキットを得ることができます。
public static Toolkit getDefaultToolkit()
Toolkit クラスの実装を取得することができれば、このクラスの createImage() メソッドまたは getImage() メソッドを使って、指定したパスからイメージを読み込むことができます。createImage() メソッドは常に新しいインスタンスとしてイメージを独立したメモリに読み込みますが、getImage() は与えられたパスのイメージがすでにメモリに存在する場合、できる限り共有しようと試みます。
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)
public abstract Image getImage(String filename)
public abstract Image getImage(URL url)
これらのメソッドが扱えるイメージの形式は JPEG、GIF、PNG のいずれかです。createImage() メソッドはパスからだけではなく、メモリ上に読み込まれたイメージデータからイメージを生成することができるという点も重要です。
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は、アプレットを使わない代わりに Toolkit クラスを使って Image オブジェクトを取得するプログラムです。このプログラムでは、プログラムが起動されたカレントディレクトリから test.jpg という名前のイメージファイルを読み込んでいます。