Java ルーキーでも大丈夫!

勝手に作ろう!
第 ソフトキーでiアプリを動かそう

3 回

木寺祥友 + 株式会社エル・カミノ・リアル
www.ecreal.co.jp

i アプリを操作する基本
ソフトキーを使おう
前回まで文字を表示させたり、絵を表示さ法を解説する。

せたりすることを中心に解説してきたが、今もちろんソフトキー以外のボタン、たとえ回はボタン操作、とくにソフトキーを使ってiば＊キーや＃キーをうまく使うことによってアプリを制御する方法について解説する。

ソフトキーのような使い方もできるのだが、ソ本題に入る前にまずソフトキーについて説

フトキー以外のボタンは、パネルとキャンバ明しよう。ソフトキーとは503i シリーズからスで操作できるボタンが違ったり、機種依存採用された、画面の下あたりに左右に配置しが激しく、方向キーを取らない機種があったてある2つのボタンだ。iアプリの動作時には、りして難しくなってしまうため、今回はくわアプリケーションの機能が割り振られた、いしくは解説しない。もしほかのボタンを使いわばパソコンのファンクションキーのようなもたい場合は、専門の書籍を買うなどしてチャのになる。右の写真を見て欲しい。画面の下レンジしてもらいたい。

部に「終了」「更新」という文字が見えるが、それでは、パネルとキャンバスのそれぞれのこれがそれぞれ左右のソフトキーに割り振らクラスにおいてどのようにソフトキーの設定すれた機能だ。この場合、左のソフトキーを押るかを解説しよう。

せばiアプリが終了し、右のを押せばデータがここで取り上げているi アプリ「MyIntro」更新されるというわけだ。今回は、このようはインターネットマガジンのウェブサイにそれぞれのキーに機能を割り振る方法と、ト写真のようにその機能を画面上で表示する方にある。参考にしてもらいたい。
internet.impress.co.jp/iappli/

ソフトキーと前回解説したタイマーイベントを組み合わせると、時間をうまくつかったアプリケーションを作れる。ここではその一例を紹介しよう。
DJタップ：曲のBPMを計る計測用のiアプリだ。曲に合わせてキーを押すことによってリアルタイムにBPMを表示してくれる。
DJ をするときなどに大変便利で、曲のBPM をこれで計れば次へのつなぎもスムーズにできる。
ストップウォッチ：専用デバイスではないが、ラップタイムにも対応している本格的なストップウォッチだ。駐車場のパーキングの目安などにも使える。

310 INTERNET magazine 2001/9

インターネットマガジン／株式会社インプレスR&D

ファンクションキー：機能を割り振られたキー。それ1つでアプリケーションの1つの機能を割り当てられる。一般的なパソコンではF1からF 12まで用意されている。
©1994-2007 Impress R&D

キャンバスでのソフトキーの入力処理
キャンバスを使った i アプリでは、意外と簡単にソフトキー入力を処理できる。キャンバスが表示されている状態でキーが押されると、そのキャンバスクラスの processEvent メソッドが呼び出されるた
め、処理のすべてを processEvent メソッドに記述すればキー入力に対応できるのだ。

OpenFrm.java 54-56行目// ソフトキーにラベルをつける
setSoftLabel( Frame.SOFT_KEY_1, "戻る" );setSoftLabel( Frame.SOFT_KEY_2, "開幕" );545556

Press!

■ processEventメソッド【137-178 行目】
processEventメソッドは、キャンバスを使う場合に必ず使用する非常に大切なメソッドだ。なぜなら、端末キーを押したときに限らず、すべてのイベントはこのメソッドで処理するからだ。

public void processEvent（ int type, int param ）このメソッドは、type と param の2つの引数がある。それぞれ、type : イベントのタイプ
param : タイプに応じたパラメーターが入っている。processEvent メソッドでは、この2 つの引数から条件文を使ってイベントの内容を判断し、処理を記述するのだ。

■ソフトキー 1の入力を処理する【154-159 行目】
実際にソフトキー1 が押されたときの処理の仕方を見てみよう。155 行目を見てみると、if文の条件が、type == Display.KEY̲PRESSED̲EVENT ・・・「キーが押された」
param == Display.KEY̲SOFT1・・・「ソフトキー 1 が」の両方を満たす場合となっている。これで「ソフトキー1 が押された場合」を表しているため、この中にソフトキー1を押したときに行いたい処理を記述すればよい。ソフトキー1に限らず、キーの入力によるイベントでは引数 type にOpenFrm.java 137-178行目

137
138
139
140141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161

キーが押された時 ： Display.KEY̲PRESSED̲EVENT
キーが離された時 ： Display.KEY̲RELEASED̲EVENTが入っているため、それぞれ使い分けよう。さらに、type が上の2つの場合には引数 param に使用されたキーの種類（Display クラスの定数）が入っている。
これを使い分ければ、キーごとにイベントを分けられる。

■ソフトキーにラベルを付ける【54-56 行目】
ソフトキーには、setSoftLabelメソッドを使うことで画面上に表示させるラベルをつけられる。 ただし、 このメソッドで使 うソフトキーの定 数 はFrame.SOFT̲KEY̲1 などFrameクラスの定数なので注意してほしい。

162163164
165
166
167
168
169
170
171
172
173
174

■注意すべき点
このキーイベントは、残念ながらすべての端末キーが標準で使えるわけではない。
標準で使えるのはソフトキー、数字キー、方向キーと選択キー、それに＊と＃キーだ。また、キー入力には「押されたとき」と「離されたとき」の2 つのイベン

175
176
177
178

/**
* イベント処理*/
public void processEvent( int type, int param ){// タイマーイベント
if ( type == Display.TIMER_EXPIRED_EVENT ){// カウントを増やす
tmCnt++;// 開幕処理
opening();
return;}// ソフトキー１&キープレスイベント
else if ( param == Display.KEY_SOFT1 && type== Display.KEY_PRESSED_EVENT ){// 戻る
Display.setCurrent( MyIntro.topF );}// ソフトキー２&キープレスイベント
else if ( param == Display.KEY_SOFT2 && type== Display.KEY_PRESSED_EVENT ){// 開幕// 既に開幕の場合は初期化
try{st.stop();st.dispose();}catch ( Exception e ) {}// 開幕
tmCnt = 0;
repaint();
st = ShortTimer.getShortTimer( this, 0, ITV,true );st.start();}}

トがあるが、特殊な使い方をしない限りどちらか片方を使えばよい。
■：変数名■：コメント ■：外部ファイル名やカスタマイズ可能なところ

インターネットマガジン／株式会社インプレスR&D

if 文：「もし○○ならば」という条件を置き、それに当てはまるかどうかでプログラミングの流れを分岐する構文。

©1994-2007 Impress R&DINTERNET magazine 2001/9311勝手に作ろう!

iアプリ

パネルでのソフトキーの入力処理

パネルを使った i アプリでは、キー入力の処理の仕方がキャンバスの場合とまったく異なる。パネルではイベントリスナーという考え方でキー入力を処理することになる。ここでは、実践的にソフトキーの例を使ってイベントリスナーの使い方だけに注目してみよう。

Press!

■パネルでソフトキーを使う流れ
パネルでソフトキーを使うには、ソフトキーが押されたというイベントを知らせるものと、そのことを知らされてから処理を行うメソッド（リスナー）とを用意する必要がある。また、それにはSoftKeyListener の実装と言って、パネルクラスの宣言であらかじめSoftKeyListener を使うことを記述しておく必要がある。それではその過程を見ていこう。

ProfiFrm.java 13-17行目

13 /**
14 * プロフィールパネル
15 */16 class
ProfiFrm
SoftKeyListener
17 {extends

Panelimplements■ SoftKeyListenerの実装する【16 行目】
SoftKeyListener を実装するには、パネルクラスの宣言のあとで implements
SoftKeyListenerと記述すればよい。

■パネルにリスナーを登録する【32 行目】
ここでは、どのインスタンスにあるメソッドをリスナーにするかを設定している。
ここでの引数 this とは自分自身を指す言葉であり、ProfiFrm インスタンス自身を指している。つまり、「このインスタンス内でのキーイベントに対応するリスナーは、このインスタンス内に書いておく」という意味である。
なお、29 行目でソフトキーラベルをセットしているが、これはキャンバスの場合

ProfiFrm.java 23-32 行目
23/**24* 初期化を行うコンストラクタ
25*/
26
public ProfiFrm()
27{28// ソフトキーにラベルをつける
29
setSoftLabel( Frame.SOFT_KEY_1, "戻る" );30
31// リスナーを登録する
32
setSoftKeyListener( this );と同じだ。

■ softKeyPressedメソッドの記述【97-108 行目】

ProfiFrm.java 97-113行目

このメソッドは、「ソフトキーが押されたとき」に呼び出されるリスナーだ。つま

97
98
99
100
101102
103
104
105
106
107
108
109
110
111
112
113/*** ソフトキーが押されたら時に呼ばれる*/
public void softKeyPressed( int softKey ){// ソフトキー１if ( Frame.SOFT_KEY_1 == softKey ){// 戻る
Display.setCurrent( MyIntro.topF );}
}

■：変数名

■：コメント ■：外部ファイル名やカスタマイズ可能なところ

り、このなかにソフトキーが押されたときに行う処理を記述すればよい。引数はsoftKey だけで、ここにはFrame クラスのソフトキーを表す定数が入っている。
先ほどラベルのセットに使ったものと同じだ。

■ softKeyReleasedメソッドの記述【110-113 行目】
このメソッドは「ソフトキーが離されたとき」に呼び出されるリスナーだ。記述方
法はsoftKeyPressed メソッドと同じだ。今回の例では、このメソッドには中身がなにも記述されていないが、これは「SoftKeyListener を実装した場合は、たとえ空でもsoftKeyPressedメソッドとsoftKeyReleasedメソッドの両方をそろえなくてはならないというルールがあるためだ。

■ソフトキー以外のキー入力/*** ソフトキーが離された時に呼ばれる*/
public void softKeyReleased( int softKey ) {}ソフトキー以外のキーは、KeyListener を使う。準備の流れはソフトキーの場合とほぼ同じになっている。それぞれ、s e t K e y L i s t e n e r 、k e y P r e s s e d 、keyReleased とメソッド名を変更すればよい。
ただし、N503i でパネルを使った場合、標準では方向キーのイベントが取れない

KEY_PRESSED_EVENT

キーが押されたイベント

ので注意してほしい。

KEY_RELEASED_EVENT

キーが離されたイベント

参考にキャンバスクラスでのイベントの種類を右の表に挙げておく。

TIMER_EXPIRED_EVENT

タイマーイベント

312 INTERNET magazine 2001/9

インターネットマガジン／株式会社インプレスR&D

イベントリスナー：プログラミング用語。ほかからのイベントが発生したことを知らされてから動くメソッド。イベントの発生を監視し続けるのは非効率的だという発想から生まれた。

©1994-2007 Impress R&D

今月のオマケ!

3 分で完成するオリジナル i アプリ「 自 分 の 絵 で ス ロ ッ ト を 作 ろ う 」！
ここでは、ちょっとした変更だけで作れる自分だけの i アプリを紹介していく。
今月は自分で用意した画像をそのままスロットにできる「Facerot」だ。

1 ダウンロードしよう

2
Facerotは、internet.impress.co.jp/iappli/に置いてあるので、Facerotフォルダーごとダウンロードしてしまおう。

差し替える画像を作ろう
スロットの画像は髪と目と口、それぞれ3つずつ用意する。1つあたりの大きさは、99 ×33 ピクセルで、全体のファイルサイズは6KB 以内に収めておこう。

3 画像を差し換えよう！
それでは用意した9 つの画像に差し換えてしまおう。

5 完成!
自分のホームページエリアにアップロードしよう。その際、i モードからダウンロードするときに使うhtml ファイルを忘れずに。

オリジナルiアプリ募集中!

4

今月のオマケ!は顔全体を統一した大きさにするのがポイントだ。でないと顔がずれてしまうぞ
なってしまうぞ。うまくできたら、オリジナルi アプリをアップロードしたサイトのURL を編集部宛てにメールしよう。もしできなくても、質問でも感想でもなんでもOKだ。応募作品はWe
Love Internet Peopleでも紹介するので、ドシドシ送ってきてもらいたい。宛て先は次のとおり。lim-iappli@impress.co.jp

コンパイルしよう！

もっと知りたいキミにはコレ！
DoJaを使いコンパイルしよう。これで、新しい画像を使ったスロットに生まれ変わるぞ。なお、DoJaについて分からない人はDoJaのページ
www.nttdocomo.co.jp/i/java/tool.html
を参照してほしい。

『 今すぐできる i アプリプログラミング』
小社発行 本体価格2,400円
来月なんて待ってられない、もっとくわしくいろいろと知りたい!と思っている君にはコレがオススメ。本連載の木寺氏が執筆しているため、ここで取り上げているiアプリについて、もっとくわしく解説している。一緒に読んでいけば、理解が深まるぞ。

インターネットマガジン／株式会社インプレスR&D

アップロード：ネットワークを通じて、クライアントコンピュータのデータをサーバーに転送すること。逆はダウンロード。

©1994-2007 Impress R&D

INTERNET magazine 2001/9313

［インターネットマガジン バックナンバーアーカイブ］ ご利用上の注意
この PDF ファイルは、株式会社インプレス R&D（株式会社インプレスから分割）が 1994 年～2006 年まで発行した月刊誌『インターネットマガジン』の誌面を PDF 化し、「インターネットマガジン バックナンバーアーカイブ」として以下のウェブサイト「All-in-One INTERNET magazine 2.0」で公開しているものです。

http://i.impressRD.jp/bn
このファイルをご利用いただくにあたり、下記の注意事項を必ずお読みください。
z 記載されている内容（技術解説、URL、団体・企業名、商品名、価格、プレゼント募集、アンケートなど）は発行当時のものです。
z 収録されている内容は著作権法上の保護を受けています。著作権はそれぞれの記事の著作者（執筆者、写真の撮影者、イラストの作成者、編集部など）が保持しています。
z 著作者から許諾が得られなかった著作物は収録されていない場合があります。
z このファイルやその内容を改変したり、商用を目的として再利用することはできません。あくまで個人や企業の非商用利用での閲覧、複製、送信に限られます。
z 収録されている内容を何らかの媒体に引用としてご利用する際は、出典として媒体名および月号、該当ページ番号、発行元（株式会社インプレス R&D）、コピーライトなどの情報をご明記ください。
z オリジナルの雑誌の発行時点では、株式会社インプレス R&D（当時は株式会社インプレス）と著作権者は内容が正確なものであるように最大限に努めましたが、すべての情報が完全に正確であることは保証できません。このファイルの内容に起因する直接的および間接的な損害に対して、一切の責任を負いません。お客様個人の責任においてご利用ください。

このファイルに関するお問い合わせ先
All-in-One INTERNET magazine 編集部
im-info@impress.co.jp
Copyright © 1994-2007 Impress R&D, an Impress Group company. All rights reserved.