MIDPアプリ作成講座第6回::ボタンを利用する方法

By uchida - 09/03/06 - このエントリをはてなブックマークに追加このエントリをYahoo!ブックマークに追加このエントリをdel.icio.usに追加このエントリをFC2ブックマークに追加

前回に引き続き、UI関連の記事になります。
UIを利用するにあたりボタンは必須になると思います。
MIDPでこれを実現しようとすると、私には若干違和感がありました。
それは、他のUIとはイベントを受け取るコンポーネントが違うことです。
前回紹介したCommandListenerがソフトキーなどの高レベルなイベントを受け取るものだとすると、ItemCommandListenerはこれから紹介するItemで宣言されたイベントを取得するものだそうです。
分かっているかたには、ごく自然なことかもしれませんね。

では早速ボタンを使用したサンプルとして、入力したテキスト分をボタンクリックでクリアするものを作成しましたのでご紹介します。

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.ItemCommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.Spacer;
import javax.microedition.midlet.MIDlet;

public class Midp06 extends MIDlet {

	//private Midp06Form mainForm;
	
	public Midp06(){
		//フォーム生成
		Midp06Form mainForm = new Midp06Form();
		
		//カレントフレームにフォームを設定
		Display.getDisplay(this).setCurrent(mainForm);
	}
	
	protected void startApp() {
	}
	
	protected void pauseApp() {
	}
	
	protected void destroyApp(boolean unconditional) {
	}
}

class Midp06Form extends Form implements ItemCommandListener{

	StringItem  clearButton;
	TextField   inputTextBox;
	
	/** コンストラクタ **/
	Midp06Form(){
		super("メモ帳");
		
		//入力テキスト
		append(new Spacer(240,5));
		inputTextBox = new TextField("入力内容", "", 200, TextField.ANY);
		inputTextBox.setInitialInputMode("UCB_HIRAGANA");
		append(inputTextBox);
		
		//クリアボタン
		append(new Spacer(240,5));
		clearButton = new StringItem("クリア","",Item.BUTTON);
		clearButton.setLayout(Item.LAYOUT_CENTER);
		clearButton.setDefaultCommand(new Command("",Command.SCREEN,0));
		clearButton.setItemCommandListener(this);
		append(clearButton);
	}
	
	public void commandAction(Command cmd,Item item){
            if (item==clearButton) {
    		    System.out.println("テキストクリアしました。");
    		    inputTextBox.setString("");
            }
	}
}

解説

前回のサンプルから少し構造がかわっております。
大きなところからですとまず、インターフェースがCommandListenerからItemCommandListenerに変更してあります。
ソフトキーを利用する場合はCommandListenerも実装する必要があります。
次にMIDlet継承クラスに直接インターフェースを実装するのではなく、Formを継承したMidp06Formに実装しました。
こちらの方が、処理内容がUI用に分割できるためコードが見易くなります。

import javax.microedition.lcdui.Item;
[Item]クラスを使用しています。
これを利用してレイアウトの変更を行っています。
また、ボタンのデザインや各種定数をもっています。

append(new Spacer(240,5));

これで、画面にスペースが入ります。

clearButton = new StringItem("クリア","",Item.BUTTON);

このItem.BUTTONで通常の良く見るボタンのデザインになります。

その他の利用についてはこちらを参照ください。
http://godwood.allnet.ne.jp/vioret/midpapi2/62.html

	public void commandAction(Command cmd,Item item){
        if (item==clearButton) {
    		System.out.println("テキストクリアしました。");
    		inputTextBox.setString("");
        }
	}

こちらが実際ボタンをクリックすると実行するメソッドです。
とくに特筆するところはありませんね。

以上になります。

実行結果