ImageBundle

ここ数日GWTを使ってみて便利だったこと。
GWTで画像を表示する場合にはImageというヴィジェットを使うのですが、ImageBundleというインタフェースを使うと、クラスパス上の画像ファイルを簡単に使うことができます。さらに画像ファイル取得のためのHTTPリクエストを減らすために、GWTが複数画像を一つに合成したうえでまとめて取得してくれます。locale毎に異なるファイルを表示することもできます。

package sample.client;

public class MyApp implements EntryPoint {
	public interface Images extends ImageBundle{
		AbstractImagePrototype open();

		/**
		 * Javadocアノテーションでファイルを指定する
		 * @gwt.resource edit_icon.gif
		 */
		AbstractImagePrototype edit();

		/**
		 * アノテーションでファイルを指定する
		 */
		@Resouce("sample/client/icons/delete.gif")
		AbstractImagePrototype delete();
	}

	public void onModuleLoad() {
		// ImageBundleを生成する
		Images images = GWT.create(Images.class);

		// 初期化処理...

		// ImageBundleから画像を生成する
		Image openIcon = images.open().createImage()
	}
}

こんな感じで、ImageBundleインタフェースを継承したインタフェースを定義しておきます。その中に、AbstractImagePrototypeを返すメソッドを定義しておくと、同一パッケージに存在するメソッド名に対応した画像ファイル(png,gif,jpg)を取得することができます。メソッド名と別のファイルや別パッケージのファイルを指定する場合は、Javadocの@gwt.resourceアノテーションまたは@Resourceアノテーションで指定します。

詳しい説明はImageBundleのJavadoc参照。