iアプリは、画面に何かを表示するためには必ずユーザーインタフェース(UI)を実装しなければならない。前回のサンプル「HelloWorld」でもUIについて少し触れているが、今回からさらに詳しく解説していく。

iアプリのUIの実装は大きく二つ

 iアプリのUIは、大きく分けて以下の二つの実装方法が存在する。

・高レベルUIコンポーネントによる実装
・低レベルAPIによる実装

 高レベルUIコンポーネントは、比較的容易にUIを構成するパーツを利用し、画面に配置することができる。簡単に扱える反面、取り扱いに関する自由度が低い。低レベルAPIは、UIを構成するパーツを自分自身で定義し、配置も自由に行うことができる。自由度が高い半面、実装に手間がかかる。まずは高レベルUIコンポーネントによる実装について解説していく。

高レベルUIの構成

 高レベルUIは、高レベルAPIと呼ばれるAPI群を利用して実装する。高レベルAPIによって実現されるUIはコンポーネントと呼ばれ、表のようなコンポーネントが存在する。

表1●UIコンポーネントの一覧
コンポーネント名コンポーネントの内容
ImageLabel静止画像を表示するコンポーネント
Label1行の文字列を表示するコンポーネント
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()を行っている。通常時でも、メディアデータを取り扱う際、不要になったメディアデータはメモリを解放するために意識して破棄すべきである。