/* iアプリ, MIDP での Panel/Form の使用例 Time-stamp: "2005/12/08 Thu 19:51 hig" Saburo Higuchi 2003-2005 http://www.math.ryukoku.ac.jp/~hig/ プログラム解説等 http://www.a.math.ryukoku.ac.jp/~hig/course/juniors_2005/09/ */ 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 { PanelSample 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 は 1 にのみ存在 Button bt1; // ソフトキーラベル String cctitle [] = {"入力","ダミー"};// キャンバスでのソフトキー String cftitle [] = {"図","ダミー"}; // パネルでのソフトキー /** コンストラクタ. 最初に1回だけ実行される */ PanelCanvas(PanelSample m){ this.parent=m; // ソフトキー, コマンドキーの設定 setSoftLabel(Frame.SOFT_KEY_1, cctitle[0]); setSoftLabel(Frame.SOFT_KEY_2, cctitle[1]); } 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); // ユーザーは入力可 p.add(tb2); // 数値入力用 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 を使う。 // 1 では Panel と Canvas でソフトキーの扱いが異なる. p.setSoftLabel(Frame.SOFT_KEY_1,cftitle[0]); p.setSoftLabel(Frame.SOFT_KEY_2,cftitle[1]); 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: */