/* iアプリ, MIDP の Canvas の使い方の例 Time-stamp: "2005/10/07 Fri 17:26 hig" Saburo Higuchi 2004 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://sparrow.math.ryukoku.ac.jp/~hig/course/juniors_2004/02/ この課題やるときは, 方眼紙用意してあげたほうがいいかも. */ #if DOJA import com.nttdocomo.ui.*; #elif MIDP import javax.microedition.midlet.*; import javax.microedition.lcdui.*; #endif #if DOJA #elif MIDP #else // DoJa/MIDP Builder を使われる方へ: // まず, プログラムの先頭で, #define DOJA // などと定義する必要があります. // 以下の define 文は, #if - #endif の中に書かれていますので, // DoJa/MIDP Builder のプリプロセッサでは処理できません. // そこで, #if - #endif はやめて, // いらない方をJava の意味でコメント文にしてください. #endif #if DOJA #define MYALIGN +0 #define MYAP IApplication #define MYSTART start #define MYBLACK Graphics.getColorOfName(Graphics.BLACK) #define MYWHITE Graphics.getColorOfName(Graphics.WHITE) #define MYBLUE Graphics.getColorOfName(Graphics.BLUE) #define MYRED Graphics.getColorOfName(Graphics.RED) #define MYGREEN Graphics.getColorOfName(Graphics.GREEN) #define MYYELLOW Graphics.getColorOfName(Graphics.YELLOW) #define MYMAGENTA Graphics.getColorOfName(Graphics.MAROON) #define MYCYAN Graphics.getColorOfName(Graphics.AQUA) #define MYDIALOG Dialog #define MYLABEL Label #define MYADD add #define MYTEXT Text #elif MIDP #define MYALIGN ,Graphics.LEFT|Graphics.BOTTOM #define MYAP MIDlet #define MYSTART startApp #define MYBLACK 0,0,0 #define MYWHITE 255,255,255 #define MYBLUE 0,0,255 #define MYRED 255,0,0 #define MYGREEN 0,255,0 #define MYYELLOW 255,255,0 #define MYMAGENTA 255,0,255 #define MYCYAN 0,255,255 #define MYDIALOG Alert #define MYLABEL StringItem #define MYADD append #define MYTEXT String #endif /** Canvas の例(イベント処理なし) */ public class CanvasSample extends MYAP { /** 起動するときに呼ばれる メソッド. 必須. */ public void MYSTART(){ MyCanvas mc = new MyCanvas(this); #if DOJA Display.setCurrent(mc); #elif MIDP Display.getDisplay(this).setCurrent(mc); #endif } #if MIDP /* 以下は, 空でも定義しておくことが必要 */ public void pauseApp(){} public void destroyApp(boolean unconditional){} #endif /* 自分で好きなだけメソッドを定義してよい */ } /** Canvas を用いたグラフィックス */ class MyCanvas extends Canvas { // MyCanvas という名前は自分で決められる. CanvasSample parent; // この Canvas を呼び出したクラス public MyCanvas(CanvasSample ap){ this.parent=ap; // これは樋口の癖. 必須ではない. } /** 描画. このメソッドで描きたいものを描く */ public void paint(Graphics g){ int width=getWidth(); // 画面の横幅. int height=getHeight(); // 画面の高さ // 座標系は左上が (0,0), 右下が (width-1,height-1). J2SE と同じ // 画面を消去. 白い四角形を描く. MIDP の場合, RGB値で設定 g.setColor(MYWHITE); g.fillRect(0,0,width,height); // 左上 (0,0). // 線を引く g.setColor(MYBLUE); g.drawLine(0,0,20,20); //(0,0) から (20,20) に線を引く g.setColor(MYRED); #if DOJA // DoJa では多角形が描ける int x[]={width-20,width-20,width-40,width-40,width-30}; // 5頂点のx座標 int y[]={height-30,height-60,height-60,height-30,height-20};// 5頂点のy座標 g.fillPolygon(x,y,5); // この使い方はJ2SEと同じ // DoJa3.0 以降(505以降)は楕円弧が描ける g.drawArc(0,height-100,100,100,30,180); // fillArc なら塗り潰す. #elif MIDP // MIDP には fillPolygon はなく, 4角形のみ. g.fillRect(width-40,height-60,20,30); // かわりといっては何だが扇形を描くメソッドがある. g.drawArc(0,height-100,100,100,30,180); // fillArc なら塗り潰す. #endif // 液晶画面のサイズを表示 Font font=Font.getDefaultFont(); g.setFont(font); int fheight=font.getHeight(); // フォントの高さ int fwidth=font.stringWidth("m"); // プロポーショナルフォントの幅は, // キャラクタによって異るので. // MIDP では最後に alignment を指定する引数がある. g.drawString(width + "x" + height + " " + fwidth + "x" + fheight , 0, height-1 MYALIGN); } } /* Local Variables: mode: java compile-command: "make -k PLAT=DOJA CanvasSample.java" End: */