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参照。