JAVA(iアプリ)
高レベルAPI型アプリの解説
時刻表アプリの解説
高レベルAPIを使用したiアプリを使用する上で必要な情報を解説します。
import com.nttdocomo.ui.*;
import java.io.*;
1行目はiアプリを作成する時に必ず必要となるクラスです。
2行目は時刻取得のために必要となります。
// IApplicationクラス
public class Station extends IApplication {
public void start(){
StationPanel ap = new StationPanel(this);
Display.setCurrent(ap);
}
}
iアプリのアプリケーションとしての機能を持ったクラスでiアプリの起動用クラス。
必ずstart()から始まります。
表示用のクラスのインスタンスを作るときIApplicationのインスタンス「this」をパラメータで渡しています。
「Display.setCurrent(ap)」で作成したPanelのインスタンスを画面に表示しています。
//Panelクラス
class StationPanel extends Panel implements SoftKeyListener {
Panelクラスを継承して高レベルAPI(テキストボックス、リストボックスといったコンポーネント)が使えるようにしています。
ソフトキーを押した時にイベントを発生させるものをリスナーといい、インターフェイスというクラスでインプリメントして使用する必要があります。
インターフェイスを使用する時は、用意されたすべてのメソッドを用意する必要があります。
//上りデータ
private int jikoku1[] = {
347,3,4,3,3,
};
//駅名データ
private String eki[] = {
"松本 ","長野 ","高尾 ","辰野 ","岡谷 ","立川 ","中津川 ","甲府 ",
};
時刻データは発車時刻を分単位で表したもの(時×60+分)、次の駅までの乗車時間が3駅分、
目的駅コードの順に並んでいます。
駅名は1から時刻表に出てきた順に適当に設定しています。(データサイズの関係から到着駅が)
// コンストラクタメソッド
StationPanel(IApplication ap) {
super();
iApp = ap;
初期化処理(スーパークラスに渡す)を行い、インスタンスを渡しています。
now = System.currentTimeMillis() / 60000;
now = (now + 540) % 1440;
sh = String.valueOf(now / 60);
if (sh.length() == 1) sh = "0" + sh;
sm = String.valueOf(now % 60);
if (sm.length() == 1) sm = "0" + sm;
System.currentTimeMillis()で得られる時刻情報は1970/1/1 0:00:00から1/1000単位でカウントしている時刻情報です。
60000で割って分単位にしたのち、国際標準時なので日本の時差9時間分の修正を加えています。
try{
pic1 = new String(b,"SJIS");
b[1] += 2;
pic2 = new String(b,"SJIS");
} catch (UnsupportedEncodingException e){}
iモードの絵文字を使用しています。
サポート外の場合はエラーが発生するので例外処理を行っています。
//リストボックス
st1 = new ListBox(ListBox.CHOICE);
lst1.append("松本(中央上り)");
lst1.append("南松本(中央上り)");
lst1.append("村井(中央上り)");
lst1.append("広丘(中央上り)");
lst1.append("塩尻(中央下り)");
lst1.append("村井(中央下り)");
lst1.append("南松本(中央下り)");
lst1.select(0);
add(lst1);
リストボックスを作成して選択項目を追加しています。
「select(0)」を使用して、初期位置を先頭にして画面に追加します。
txt1 = new TextBox("",18,6,TextBox.DISPLAY_ANY);
add(txt1);
txt1.setEditable(false);
結果表示用のテキストボックスを作成します。
サイズは横18文字縦6行で、入力モードはデフォルトです。
「setEditable(false)」を使用して、内容の変更ができないようにして画面に追加します。
// ソフトキー1の表示を変更
setSoftLabel(Frame.SOFT_KEY_1, "検索");
// ソフトキー2の表示を変更
setSoftLabel(Frame.SOFT_KEY_2, "EXIT");
// SoftKeyListenerを設定
setSoftKeyListener(this);
ソフトキーの文字を変更します。
ソフトキーのイベント処理を開始させます。
// キーを離した時のイベント処理
public void softKeyReleased(int key) {
switch(key){
// ソフトキー2の処理
case Frame.SOFT_KEY_1:
押し下げたソフトキーを離したときに呼ばれてきます。
switch文でキー毎に処理を行っています。
rst = "";
cnt = 0;
sct = lst1.getSelectedIndex();
if (sct < 4) {
for (i = 0 ;i < honsuu1;i++) {
if (jikoku1[i*5+sct] >= now && jikoku1[i*5+sct] > 0) {
sh = String.valueOf((jikoku1[i*5+sct] % 1440) / 60);
f (sh.length() == 1) sh = "0" + sh;
sm = String.valueOf(jikoku1[i*5+sct] % 60);
if (sm.length() == 1) sm = "0" + sm;
rst = rst + sh + ":" + sm + " " + eki[jikoku1[i*5+4]-1];
if (jikoku1[i*5+2] > 0) {
rst = rst + pic1 + "\n";
} else {
rst = rst + pic2 + "\n";
}
cnt++;
if (cnt >= 6) {
i = honsuu1;
break;
}
}
}
}
txt1.setText(rst);
break;
リストボックスで選択された項目番号を得ています。
現在時刻より後に発車する電車を検索してフォーマットを 整え絵文字をセットしています。
検索が終わったらテキストボックスのテキストに入れています。
// ソフトキー2の処理
case Frame.SOFT_KEY_2:
iApp.terminate();
アプリの終了処理です。
// 他のキーを押した時のイベント処理(使わない)
public void softKeyPressed (int key) {}
前に書いたとおりインターフェイスに用意されたすべての メソッドを用意する必要があるので使わなくても 書いておく必要があります。