- 締切済み
javaでのiアプリの画面表示について
javaでiアプリを作成したいのですが、行きずまっています。 テキストボックスとストップウォッチを画面上に両方表示させたいのですが、下のDisplay.setCurrent(p);とDisplay.setCurrent(mainWin);のどちらかしか表示されません。 ストップウォッチは、MainWin.javaが他にありますのでしっかり起動します。 どうすれば良いでしょうか? package stopwatch; import com.nttdocomo.ui.*; public class StopWatch extends IApplication implements ComponentListener { MainWindow mainWin; TextBox textbox1; TextBox textbox2; public void start() { Panel p = new Panel(); textbox1 = new TextBox("",16,2,TextBox.DISPLAY_ANY); p.add(textbox1); textbox2 = new TextBox("(未入力)",16,2, TextBox.DISPLAY_ANY); textbox2.setEditable(false); p.add(textbox2); p.setComponentListener(this); Display.setCurrent(p); mainWin = new MainWindow(); Display.setCurrent(mainWin); } public void componentAction(Component source , int type, int param) { if(type == ComponentListener.TEXT_CHANGED && source == textbox1) { textbox2.setText(textbox1.getText()); } } }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- planet_9_9
- ベストアンサー率68% (57/83)
No.1です。 MainWindowはCanvasなんですね。 であれば、先のとおりPanelかCanvasのどちらかしか表示できませんので Panel内にある2つのTextBoxをCanvas内で描画してCanvasのみにするのがよいかと思います。 実際の描画はDispTimeのようなので、DispTime内で描画することになると思います。 逆にMainWindowをやめて、Panelにストップウォッチを含めることでも実現できるかもしれません。 その場合、ストップウォッチ部分はImageLabelを使うことになるでしょう。
- planet_9_9
- ベストアンサー率68% (57/83)
別カテゴリで質問をして、このカテゴリに誘導されたのだと思いますが あちらの質問を放ったままというのはよろしくないです。 MainWindow.javaの中身が分かりませんが、Canvasなのでしょうか。 iアプリでは、一度にPanelとCanvasの両方を表示することは出来ません。 なので、 > Display.setCurrent(p);とDisplay.setCurrent(mainWin); > のどちらかしか表示されません。 は当然のことです。 > どうすれば良いでしょうか? テキストボックスとストップウォッチの両方を 1つのPanelあるいはCanvasで実装すること以外にはありません。 ドコモのWebから取得できる「iアプリコンテンツ開発ガイド」は ご覧になりましたでしょうか。 まだでしたら、一度ご覧になるとよいかと思います。
補足
ありがとうございます。別カテゴリでの質問はベストアンサーにさしていただいました。 MainWindow.javaを下に載せました。 テキストボックスを携帯の実行キーで入力した時にストップウォッチも起動しカウントを始めるようにしたいのですがどうすれば良いでしょうか?もしよければ教えていただきたいです。 package stopwatch; import com.nttdocomo.ui.*; import com.nttdocomo.util.*; public class MainWindow extends Canvas implements TimerListener { static final int STATE_IDLE = 0; static final int STATE_ACTIVE = 1; static final int STATE_STOP = 2; Graphics screen; Timer timer; int timerRes; int state; int time; public MainWindow() { screen = getGraphics(); timer = initTimer(); time = 0; state = STATE_IDLE; } private Timer initTimer() { Timer ret = new Timer(); ret.setRepeat(true); timerRes = ret.getResolution(); if (timerRes <= 10) { timerRes = 10; } ret.setTime(timerRes); ret.setListener((TimerListener)this); return ret; } public void paint(Graphics g) { DispTime.disp(time, g); } public void processEvent(int type, int param) { switch (type) { case Display.KEY_PRESSED_EVENT: processKeyEvent(param); break; default: } } private void processKeyEvent(int param) { switch (param) { case Display.KEY_SELECT: processSelectKeyEvent(); break; default: } } private void processSelectKeyEvent() { switch (state) { case STATE_IDLE: processSelectKeyEventOnIdle(); break; case STATE_ACTIVE: processSelectKeyEventOnActive(); break; case STATE_STOP: processSelectKeyEventOnStop(); break; default: } } private void processSelectKeyEventOnIdle() { timer.start(); state = STATE_ACTIVE; } private void processSelectKeyEventOnActive() { timer.stop(); DispTime.disp(time, screen); state = STATE_STOP; } private void processSelectKeyEventOnStop() { time = 0; DispTime.disp(time, screen); state = STATE_IDLE; } // TimerListner::timerExpired - タイムアウト処理 // public void timerExpired(Timer source) { time += timerRes / 10; DispTime.disp(time, screen); } }
補足
返信本当にありがとうございます。 まだまだ未熟者なので、もしよければ、変更されたソースを書いていただけるとありがたいです。 よろしくお願いします。