礒山 賢司
前回は,iアプリのメイン・クラスである「IApplicationクラス」について解説しました。今回のテーマはもう少し実践的な内容で,操作するユーザーとの接点でもある「描画」について解説していきたいと思います。
iアプリでは,「高レベル描画」と「低レベル描画」という,2種類の描画手段を提供しています。それぞれの違いについて簡単に言うと,高レベル描画は,iアプリのJava環境があらかじめ提供する描画用コンポーネント(ソフトウエア部品)を使って,UI(ユーザー・インタフェース)を作成する描画手段です。開発者が携帯電話の描画の仕組みを知らなくても,コンポーネントを使うだけで簡単に画面を作成できるのが特徴です。
一方の低レベル描画は,「イメージの描画」「ドットの描画」など,グラフィック描画機能を多用するアプリケーション,例えばゲームなどを作成するときに用いる描画手段です。高レベル描画では実現できないような細かいグラフィックの描画が可能ですが,使いこなすためには携帯電話の描画の仕組みを知らなくてはならないため,高レベル描画よりも難しいプログラミングが必要となります。
●高レベル描画
まずは,高レベル描画について解説しましょう。iアプリでは,「Button」「ImageLabel」「Label」「ListBox」「TextBox」「Ticker」「VisualPresenter」の7つのUIコンポーネントを用意しています。それぞれのコンポーネントの機能については,表1を参照してください。
クラス | 機能 |
Label | Panel上に1行のテキストを表示する |
ImageLabel | Panel上に画像を表示する |
Button | ボタンを表現するコンポーネントで,ユーザー操作を受け付けるためのインタフェースInterractableを実装している |
ListBox | 各種選択リストを表現するためのコンポーネントで,ユーザー操作を受け付けるためのインタフェースInterractableを実装している |
TextBox | 入力フィールドを表現するためのコンポーネントで,ユーザー操作を受け付けるためのインタフェースInterractableを実装している |
Ticker | スクロールする文字列をPanel上に表示する |
VisualPresenter | 動画像を再生するためのコンポーネントで,MediaPresenterを実装している |
表1●iアプリJavaで提供されているUIコンポーネント |
これらのUIコンポーネントをPanelクラスというコンポーネントの上に配置し,GUIを形成します。Panelクラスのように,ほかの部品を配置する土台となるクラスを「コンテナ・クラス」と言います。
●Panelクラス
iアプリを開発する時にいつも頭を悩ますのが,「どのようにコンポーネントを配置するか」ということです。
iアプリのJava環境では「レイアウト・マネジャ」という機能により,配置するコンポーネントの大きさ(Labelクラスなどを使う場合は,そこに表示される内容の長さも考慮する)に合わせ,画面の左上から順次横並びに自動的にコンポーネントが配置されます。画面の横幅で収まらない大きさの場合は,次のコンポーネントは配置できる1行下の位置に配置される。このレイアウト・マネジャを使ってプログラミングしたのがリスト2です。1行目に表示されている「List2」は「タイトル」と呼び,Panelクラスが持つレイアウトの要素の一つです。
一方,
setLayoutManager( null );
のように,レイアウト・マネジャを無効にして,setLocationで個々のコンポーネントの座標を指定することで,アプリケーション開発者がPanel上に配置するコンポーネントを決定することもできます。リスト3は,そのサンプルです。リスト2と比較してみてください。ちなみに,レイアウト・マネジャを無効化して,コンポーネントを再配置しなければどうなるでしょう。リスト4で作成したプログラムで試してみてください。
レイアウト・マネジャは便利なコンポーネントですが,落とし穴もあります。それは,携帯端末機ごとに画面のサイズなどが異なっているため,コンポーネントの配置も機種ごとに異なってしまう,ということです。このことも考慮しておかなければなりません。
●Dialogクラス
![]() |
図1●Windowsのダイアログ |
Dialogクラスが表示できるボタンの形態や,ダイアログの種類については表2を参照してください。
形態 | エラー・ダイアログ | DIALOG_ERROR |
情報ダイアログ | DIALOG_INFO | |
警告ダイアログ | DIALOG_WARNING | |
2つボタン | DIALOG_YESNO | |
3つボタン | DIALOG_YESNOCANCEL | |
ボタン・タイプ | OKボタン | DIALOG_OK |
キャンセル・ボタン | DIALOG_CANCEL | |
NOボタン | DIALOG_NO | |
YESボタン | DIALOG_YES | |
表2●Dialogクラスの機能 |
●低レベル描画
低レベル描画では,Canvasクラスを使って描画をします。Canvasクラスは,絵をかく「キャンバス」と同じように,描画するための画面領域を提供します。1つのCanvasが1つの画面に相当します。Canvasクラスは,必ずpaint( )メソッドを使い,paint( )メソッドに渡すGraphicsオブジェクトを利用して,Canvasに描画します。
リスト6は,Canvasオブジェクトを利用してイメージ(GIF形式)や,テキストを描画するサンプルです。このプログラムでは,実装の自由度を持たせるため,イメージを取得するためにリソース・アクセスを利用していますが,この辺りの内容については次回以降で解説しますので,今は「このようなことができるのだ」程度に覚えておいてください。
●CanvasクラスとGraphicsクラス
Canvasクラスにはpaint( )メソッドが不可欠です。paint( )メソッドに渡されるGraphicsオブジェクト(Graphicsクラスのインスタンス)を利用して,Canvasに描画するからです。これらのクラスを利用することで,ドット単位の塗りつぶしはもちろんのこと,イメージ・文字の描画が自由自在にできます。また,コンポーネントを使った描画よりも動作も軽くなります。また、次回で解説する「イベント」と組み合わせて利用することにより,簡単にゲームなどが作成できます。
例えば、次回に解説する「イベント」と組み合わせることで,「キーを押すとイメージがスクロールする(「2」が上,「8」が下,「4」が左,「6」が右)」といったサンプル(リスト7)が作成できます。iアプリでの描画は,PC上で稼働するJavaアプリケーションと比べて多くの部分で機能が削減されていますが,必要最小限の機能はそろっていると言えます。PCのJavaアプリケーションでは,基本的にInternet ExplorerとNetscapeの2つのWebブラウザでの描画を考えれば事足りますが,携帯電話の場合は,次々と登場してくる機種の表示領域に合わせてカスタマイズする必要があり,この辺りが開発者の頭を悩ます種になります。
アプリケーションは多くの場合,ボタンを押すなどのユーザーのアクションを受け,何らかの応答をしなければなりません。次回は,その時に必要となる「イベント」について解説します。