/* iアプリ, MIDP での Panel/Form の使用例 Time-stamp: "2003/11/06 Thu 20:20 hig" Saburo Higuchi 2003 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://sparrow.math.ryukoku.ac.jp/~hig/course/juniors_2003/06/ */ import com.nttdocomo.ui.*; /** IApplication または MIDlet を継承するクラス */ public class PanelSample extends IApplication { /** 起動するときに呼ばれる メソッド. 必須. */ public void start(){ PanelCanvas cc=new PanelCanvas(this); Display.setCurrent(cc); } } /** Canvas を継承するクラス. */ class PanelCanvas extends Canvas implements SoftKeyListener,ComponentListener { IApplication parent; Panel p; private int x [] = {10,20,30,40}; // 四角形の x,y 座標と 幅 w 高さ h String tblabel [] = {"x","y","w","h"}; TextBox tbparam[]; TextBox tb1; // 出力用 TextBox tb2; // 入力用 ListBox li1; // 選択 // 色の種類 int [] color={Graphics.getColorOfName(Graphics.BLACK) ,Graphics.getColorOfName(Graphics.BLUE) ,Graphics.getColorOfName(Graphics.RED) ,Graphics.getColorOfName(Graphics.GREEN) ,Graphics.getColorOfName(Graphics.YELLOW) ,Graphics.getColorOfName(Graphics.MAROON) ,Graphics.getColorOfName(Graphics.AQUA) }; String [] colname={"黒","青","赤","緑","黄","マゼンタ","シアン"}; int curcolor=0; // Button は DOJA にのみ存在 Button bt1; // ソフトキーラベル String cctitle [] = {"入力"}; String cftitle [] = {"図"}; /** コンストラクタ. 最初に1回だけ実行される */ PanelCanvas(IApplication m){ this.parent=m; // ソフトキー, コマンドキーの設定 setSoftLabel(Frame.SOFT_KEY_1, cctitle[0]); } public void paint(Graphics g){ // 画面を消す g.setColor(Graphics.getColorOfName(Graphics.WHITE) ); g.fillRect(0,0,getWidth(),getHeight()); // 特定の色の長方形 g.setColor(color[curcolor]); g.fillRect(x[0],x[1],x[2],x[3]); } /** Panel/Form を表示するメソッド*/ public void showPanel(){ p = new Panel (); p.setTitle("入力してね"); // Label を追加 Label lb1=new Label ("ラベルの例"); p. add (lb1); // Ticker を追加. 追加される場所が異なる. Ticker tc1=new Ticker("これがTickerの例です。右から左に文字列が流れていきます。"); p. add (tc1); // Button を追加 DoJa にしかない bt1 = new Button("ボタンの例"); // bt1 は、このメソッドの中で宣言するのでなく、 // クラスメンバーとして宣言している。 // bt1 は componentAction にも知っていてもらわないといけないから。 p. add (bt1); // 画像つきラベル MediaImage mi=MediaManager.getImage("resource:///pose0.gif"); try{ mi.use(); Image img=mi.getImage(); ImageLabel il=new ImageLabel(img); p. add (il); } catch (Exception e){ p. add (new Label ("読み込み失敗")); } // (表示用) TextBox を追加 tb1 = new TextBox("",16,3,TextBox.DISPLAY_ANY); // "表示する文字列",横,縦,そのまま表示指定 tb1.setEditable(false); // ユーザーは入力不可 tb1. setText ("イベント表示領域。これは最初に表示される内容。"); p. add (tb1); // (入力用) TextBox を追加 tb2 = new TextBox("",16,3,TextBox.DISPLAY_ANY); tb2.setEditable(true); // ユーザーは入力可 // 数値入力用 TextBox tbparam = new TextBox [x.length]; for(int i=0; i < x.length ; i++){ p. add (new Label(tblabel[i])); tbparam[i]= new TextBox ("",3,1,TextBox.DISPLAY_ANY); tbparam[i].setEditable(true); tb2.setInputMode(TextBox.NUMBER); p. add (tbparam[i]); tbparam[i]. setText (""+x[i]); } // ListBox を追加 li1 = new ListBox (ListBox.CHOICE); // CHOICE, RADIO_BUTTON, SINGLE_SELECT, NUMBER_LIST のいずれか。 for(int i=0; i< colname.length ; i++){ li1.append(colname[i]); } li1.select(curcolor); p. add (li1); // リスナーの登録 p.setComponentListener(this);// このクラスの componentListner を使う。 // DOJA では Panel と Canvas でソフトキーの扱いが異なる. p.setSoftLabel(Frame.SOFT_KEY_1,cftitle[0]); p.setSoftKeyListener(this); // Panel/Form p に制御を移す Display.setCurrent(p); } /** イベントリスナ。implements ComponentListner を宣言したらこれが必要*/ public void componentAction(Component source, int type, int param){ if( source == bt1 && type == BUTTON_PRESSED ){ tb1. setText ("ボタンが押されたみたい。"); } else if ( source == tb2 && type == TEXT_CHANGED ){ tb1. setText (tb2. getText () + "と入力されたみたい。"); } else if ( source == li1 && type == SELECTION_CHANGED ){ if( param < 0){ return; } else { tb1. setText ("選択が" + param + "番目の" + li1.getItem(param) + "に変更されたみたい。"); // ここで curcolor=param してもよいけど, softKeyPressed でやってる } } } // パネルでのソフトキーイベント public void softKeyPressed(int key){ if( key==Frame.SOFT_KEY_1 ){ for(int i=0; i< x.length ; i++){ x[i]=Integer.parseInt(tbparam[i]. getText ()); } curcolor=li1.getSelectedIndex(); Display.setCurrent(this);// Canvas に復帰 } } public void softKeyReleased(int key){ } // Canvas でのソフトキーイベント public void processEvent(int type, int param){ if( type==Display.KEY_PRESSED_EVENT ){ switch( param ){ case Display.KEY_SOFT1: showPanel(); break; default: } } } } /* Local Variables: mode: java End: */