/* iアプリ, MIDP の Canvas クラスでのキーイベント処理の例 Time-stamp: "2006-10-12 Thu 15:45 JST hig" Saburo Higuchi 2003-2005 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://www.a.math.ryukoku.ac.jp/~hig/course/juniors_2005/03/ */ import com.nttdocomo.ui.*; /** Canvas の例(イベント処理あり) */ public class CanvasKeySample extends IApplication { /** 起動するときに呼ばれる メソッド. 必須. */ public void start(){ MyKeyCanvas mc = new MyKeyCanvas(this); Display.setCurrent(mc); } /* 自分で好きなだけメソッドを定義してよい */ } /** Canvas を用いたグラフィックス */ class MyKeyCanvas extends Canvas { /** コンストラクタ. 配列の初期化のみ行う */ public MyKeyCanvas(CanvasKeySample ap){ this.parent=ap; // これは樋口の癖. 必須ではない. for(int i=0; i < keyname.length; i++){ keyname[i]= "" + unknownkey + i; } keyname[Display.KEY_0]="0"; keyname[Display.KEY_1]="1"; keyname[Display.KEY_2]="2"; keyname[Display.KEY_3]="3"; keyname[Display.KEY_4]="4"; keyname[Display.KEY_5]="5"; keyname[Display.KEY_6]="6"; keyname[Display.KEY_7]="7"; keyname[Display.KEY_8]="8"; keyname[Display.KEY_9]="9"; keyname[Display.KEY_ASTERISK]="*"; keyname[Display.KEY_DOWN]="↓"; keyname[Display.KEY_LEFT]="←"; keyname[Display.KEY_UP]="↑"; keyname[Display.KEY_RIGHT]="→"; keyname[Display.KEY_POUND]="#"; keyname[Display.KEY_SELECT]="選択"; keyname[Display.KEY_SOFT1]="ソフトキー1"; //Panel のときと異なる. keyname[Display.KEY_SOFT2]="ソフトキー2"; //Panel のときと異なる. // ソフトキーのラベルを表示する. setSoftLabel(Frame.SOFT_KEY_1, "ソ1"); setSoftLabel(Frame.SOFT_KEY_2, "ソ2"); eventname[Display.KEY_PRESSED_EVENT]=pressed; eventname[Display.KEY_RELEASED_EVENT]=released; } /** 描画するメソッド. repaint で繰り返し呼び出される */ public void paint(Graphics g){ g.setColor(Graphics.getColorOfName(Graphics.WHITE)); g.fillRect(0,0,getWidth(),getHeight()); g.setColor(Graphics.getColorOfName(Graphics.BLUE)); g.drawString(msg,0,20 +0); // 文字列 msg を x,y 座標の位置に描く } /** 何かイベントが起きる(例. キーが押される)と呼び出されるメソッド */ public void processEvent(int type, int param){ if( param < keyname.length ){ msg=keyname[param]; } else { msg=unknownkey + " " + param; } if( type==Display.KEY_PRESSED_EVENT || type==Display.KEY_RELEASED_EVENT ){ msg += eventname[type]; } else { msg += unknown; } repaint(); } String msg=""; // 何かで初期化しておかないと. // キーの名称をいれておく配列 private static final String[] keyname=new String[0x1f]; // イベントの名称をいれておく配列 private static final String[] eventname=new String[2]; private String pressed="が押された"; private String released="が離された"; private String repeated="が押されたまま"; private String unknown="が関係する不明な動作"; private String unknownkey="不明"; CanvasKeySample parent; // この Canvas を呼び出したクラス } /* Local Variables: mode: java compile-command: "make -k PLAT=MIDP CanvasKeySample.java" End: */