龍谷大学> 理工学部> 数理情報学科> Team539> 樋口三郎> 担当科目> 2007 年> iアプリ/S!アプリ/オープンアプリを作ろうプロジェクト---数理情報演習>第 05 回

オブジェクト指向/マルチスレッド/PanelとForm

[目次|前回|次回|携帯Javaのページ|ローカルドキュメント]
Time-stamp: "2007-10-31 Wed 09:11 JST hig"

プログラムの基本形

キー入力を伴う, アニメーションの基本形はこんな感じ?
import パッケージ1;
import パッケージ2;

public class MyApplication extends IApplicationまたは MIDlet {

    public void start() または startApp(){
	ThreadCanvas cc=new MyCanvas(this);
	Display.setCurrent(cc);または Display.getDisplay(this).setCurrent(cc);
    }


    public void pauseApp(){}
    public void destroyApp(boolean unconditional){}


}

class MyCanvas extends Canvas implements Runnable 必要に応じて他にも {

    MyApplication parent;

    型 クラス変数1; //画面を表現するのに必要十分な変数
    型 クラス変数2;

    /** コンストラクタ. 最初に1回だけ実行される */
    MyCanvas(MyApplication m){
	this.parent=m;
        クラス変数の初期化;
    }

    public void paint(Graphics g){
	クラス変数の値に応じて g に絵を描く;
    }

    /* これがあるので implements Runnable と宣言できる */
    /* 100ミリ秒に1回,  クラス変数が自動的に変化する */
    public void run(){
	while(true){ // 無限ループ

	    クラス変数を変化させる;

	    try {
		Thread.sleep(100); // 100ミリ秒休む.
	    } catch ( Exception e ) {
		// 割り込みがあっても何もしない.
	    }

	    repaint();
	}
    }

    public void processEvent(int type, int param)または void keyPressed/keyReleased/keyRepeated(int keyCode){
	キー param/KeyCodeに, イベント type が発生したときに, クラス変数の値を変更;

	repaint();
    }

}

オブジェクト指向/マルチスレッド

これまでは, 必要最低限の2つのクラス(IApplication/MIDletを継承するクラス, Canvasを継承するクラス)を使用してアプリを作ってきました.

オブジェクト指向では, 1種類の ものに対して1個のクラスを定義し, 1個のものに対して1個のオブジェクトを作ります. クラスは, データメンバー(オブジェクトの内部状態)とメソッド(オブジェクトが外部に与えるサービス)を持ちます.

このような意味で, オブジェクト指向で書いたプログラム MThreadSample.javaと, 最小の2個のクラスで書いたプログラム MThreadSample.javaと, を示します. いずれも, 前回使用した画像 pose0.gif/png, pose1.gif/png が必要です.

Panel/Form

ユーザに, 選択肢から一つを選んでもらったり, テキストを入力してもらったりする GUI 画面をPanel(Doja), Form(MIDP)といいます. そのなかでももっとも簡単な, TextBoxの使い方の例TextBoxSample.java を見てみましょう. 入力結果は, GUI 画面の中に反映させることもできますし, Canvas に反映させることもできます.

他にもいろいろな部品があります. 使い方の例 PanelSample.java を見てみましょう. イメージも使っていますので, 下の画像ファイルをresフォルダにいれましょう.

ファイル名gifpng
pose0

デフォルトでは, 部品は上からつまっていきますが, レイアウトマネージャを使うと, ある程度, 配置を制御できます.

また, 上の例TextBoxSample.javaでは, キー操作でアプリを正常終了できるようになっています. IApplication.terminate(), Midlet.destroyApp() を 呼び出せばいいのです.

課題

2種類のキャラに対応する, implements Runnable な2つのクラスを作ろう. それぞれの run() で特徴の異る動きを記述しよう. これらの Thread を作ってアニメーションしよう. また, それぞれのキャラには自分の描いた jpg/png/gif 画像を使おう.

課題