iアプリは、画面に何かを表示するためには必ずユーザーインタフェース(UI)を実装しなければならない。前回のサンプル「HelloWorld」でもUIについて少し触れているが、今回からさらに詳しく解説していく。
iアプリのUIの実装は大きく二つ
iアプリのUIは、大きく分けて以下の二つの実装方法が存在する。
・高レベルUIコンポーネントによる実装
・低レベルAPIによる実装
高レベルUIコンポーネントは、比較的容易にUIを構成するパーツを利用し、画面に配置することができる。簡単に扱える反面、取り扱いに関する自由度が低い。低レベルAPIは、UIを構成するパーツを自分自身で定義し、配置も自由に行うことができる。自由度が高い半面、実装に手間がかかる。まずは高レベルUIコンポーネントによる実装について解説していく。
高レベルUIの構成
高レベルUIは、高レベルAPIと呼ばれるAPI群を利用して実装する。高レベルAPIによって実現されるUIはコンポーネントと呼ばれ、表のようなコンポーネントが存在する。
コンポーネント名 | コンポーネントの内容 |
---|---|
ImageLabel | 静止画像を表示するコンポーネント |
Label | 1行の文字列を表示するコンポーネント |
Ticker | 横スクロールする文字列を表現するコンポーネント |
ImageButton | 画像を貼り付けられるボタンを表現するコンポーネント |
AnchorButton | ボタンにアンカー風ボタン(下線付きテキスト表示されるボタン)を表現するコンポーネント |
Button | ボタンを表現するコンポーネント |
ListBox | 各種選択リストを表現するコンポーネント |
TextBox | 文字入力フィールドを表現するコンポーネント |
VisualPresenter | 動画像を表示するコンポーネント |
UIコンポーネントは、Panelと呼ばれるコンテナに追加することで画面に表現される。高レベルUI中心のiアプリは、画面ごとにそれぞれPanelを定義しておき、画面遷移の際にPanelを切り替えることで表示を切り替えることができる。
続いて、個々のUIコンポーネントについて解説する。
●ImageLabel
ImageLabelは、静止画像を表示するコンポーネントである。表示したい画像を指定し、Panelに追加することができる。
public class ImageLabelSample extends Panel {
// コンストラクタ
ImageLabelSample() {
MediaImage mi = null;
Image im = null;
try {
mi = MediaManager.getImage(
"resource:///img/imagelabelsample.gif");
mi.use();
im = mi.getImage();
// ImageLabelによる画像の追加
ImageLabel il = new ImageLabel(im);
add(il);
} catch (Exception me) {
// エラー時の処理
if (im != null) {
im.dispose();
}
if (mi != null) {
mi.unuse();
mi.dispose();
}
}
}
}
iアプリでの画像の取り込み方法についてここで触れたい。上記サンプルでは、画像はgif画像を取り込んでいる。MediaImageのgetImage()メソッドで取り込めるが、画像の指定方法は他にもいくつか存在する。
(1)resourceと呼ばれるiアプリ内部に配置されたメディアデータを指定する方法(サンプルコードで紹介の方法)
(2)サーバーから通信で取得する方法
(3)スクラッチパッドに保存したデータを読み込む方法
(4)バイト列を指定する方法
サンプルコードで紹介したresource以外は、それぞれ今後の連載の中で解説する予定である。resourceの場合、
resource://[配置されているディレクトリ名+ファイル名]
で特定のresourceファイルを指定できる。具体的な場所は、プロジェクトディレクトリ配下のresディレクトリである。resディレクトリに使いたいファイルをコピーしてビルドすると、そのビルドしたiアプリ内でファイルを読み出せるようになる。
なお、Javaのexceptionが発生する可能性がある場所ではtry/catchで括り、エラー時の復帰処理や終了処理を実装する。ここでは、必要であればImageのdispose()と、MediaResource(ここではMediaImage)のunuse()とdispose()を行っている。通常時でも、メディアデータを取り扱う際、不要になったメディアデータはメモリを解放するために意識して破棄すべきである。