- ベストアンサー
iアプリの複数パネル切替時の変数受渡
- iアプリのプログラムにおいて、複数のパネルやキャンバスで画面を切り替える際には、変数の受け渡し方が重要です。
- 例えば、MainCanvasとMainPanelの間で変数DATA_xを受け渡すためには、適切な方法を選ぶ必要があります。
- これによって、iアプリのプログラムの正常な動作を確保することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
その他の回答 (1)
- Bonjin
- ベストアンサー率43% (418/971)
関連するQ&A
- iアプリ 複数パネル切替時の変数受渡(再度)
すみませんが、再度質問です。 パネルを切替えると、変数が書換えられてません。 import com.nttdocomo.ui.*; public class TEST01 extends IApplication { MainCanvas mc; MainPanel mp; public void start() { mc = new MainCanvas(); mp = new MainPanel(); Display.setCurrent(mc); } } class MainCanvas extends Canvas{ TEST01 app; int data; public MainCanvas() { data=1; //----- data=1 Graphics g=getGraphics(); app = (TEST01)IApplication.getCurrentApp(); } public void paint(Graphics g) { data=2; // ここでdataを書換えてるのに・・・・ g.drawString("data="+data,100,100); g.drawString("セレクトキーで画面切替",50,200); } public void processEvent(int type, int param) { if (type == Display.KEY_PRESSED_EVENT) { if (param == Display.KEY_SOFT2) { IApplication.getCurrentApp().terminate(); } if (param == Display.KEY_SELECT) { Display.setCurrent(app.mp); } } } } class MainPanel extends Panel implements ComponentListener{ TEST01 app; Button b1; Label l1; public MainPanel() { app=(TEST01)IApplication.getCurrentApp(); l1=new Label("data="+app.mc.data); //書換えたdata=2にならないのはなぜ? b1=new Button("Push me"); add(l1); add(b1); setComponentListener(this); } public void componentAction(Component c,int type, int param){ if (c == b1 && type == BUTTON_PRESSED) Display.setCurrent(((TEST01)IApplication.getCurrentApp()).mc); } } data=1だったのをdata=2にしたのに、1のままです。
- ベストアンサー
- Java
- DoJa5.0 キャンバスの中にパネルは埋め込めますか?
こんにちは!iアプリを製作している初心者です。 キャンバスとパネルを同時に使ったアプリを作りたいのですが、うまくいきません…。リストボックスのパネルをキャンバスに表示しようと思っています。 私が作ったソースコードの問題の部分を書いたので、どなたかご指導をお願いします(>△<) (1)MainPage.java import com.nttdocomo.ui.*; public class MainPage extends IApplication { //アプリの開始 public void start() { MainCanvas canvas=new MainCanvas(); Display.setCurrent(canvas); canvas.exe(); } } (2)MainCanvas.java import com.nttdocomo.ui.*; class MainCanvas extends Canvas { Graphics g=getGraphics(); public MainCanvas() { while(true) { //画面の描画 g.lock(); ~省略~ g.unlock(true); } MainPanel pl =new MainPanel(); Display.setCurrent(pl); } //描画 public void paint(Graphics g) {} } (3)MainPanel.java import com.nttdocomo.ui.*; class MainPanel extends Panel { ListBox lb1,lb2,lb3,lb4; //リストボックス public MainPanel() { //リストボックス作成 lb1 = new ListBox(ListBox.SINGLE_SELECT); lb1.append("選択1"); add(lb1); ~省略~ lb4 = new ListBox(ListBox.SINGLE_SELECT); lb4.append("選択4"); add(lb4); } } このように、(2)のMainCanvas.javaに(3)のMainPanel.javaをいったん埋め込んで、最終的に(1)のMainPage.javaでまとめて表示しようと思っています。ですが、(2)のMainCanvas.javaのMainPanel pl =new MainPanel();Display.setCurrent(pl);の部分でエラーが出て、読み込んでくれません…(;△;)何がおかしいのでしょうか?それから、今後はリストボックスにコンポーネントリスナーも付けようと思っています。
- 締切済み
- Java
- iアプリ 色変更
初歩的質問ですが・・・ import com.nttdocomo.ui.*; public class TEST01 extends IApplication { public void start(){ MyCanvas mc = new MyCanvas(); Display.setCurrent(mc); } } class MyCanvas extends Canvas{ public void paint(Graphics g){ g.setColor(g.getColorOfName(g.AQUA)); g.fillRect(0,0,200,200); } } で、g.setColor(g.getColorOfName(g.AQUA))の部分で、 「 Graphics からの static メソッド getColorOfName(int) には静的にアクセスしてください。」 と、エラーがでます。 ですが、実行はできます。なぜ??
- ベストアンサー
- Java
- iアプリで複数の画面(パネル)を使いたいのですが。
以下のコードを実行するとボタンとラベルが一緒の画面に表示されますが、ボタンを押した時に新しい画面(パネル)でラベルを表示したいのです。どのようにすれば良いのでしょうか? import com.nttdocomo.ui.*; import com.nttdocomo.io.*; public class test01 extends IApplication { public void start() { mypanel w_panel = new mypanel(); w_panel.setSoftLabel(w_panel.SOFT_KEY_1,"終了"); Display.setCurrent(w_panel); } class mypanel extends Panel implements SoftKeyListener { private Label w_label; private Button w_button; public mypanel(){ w_button = new Button("ボタン"); add(w_button); w_label = new Label("ラベル"); add(w_label); setSoftKeyListener(this); } public void softKeyReleased(int param){ if(param == this.SOFT_KEY_1){ terminate(); } } public void softKeyPressed(int param){ } } }
- ベストアンサー
- Java
- iアプリでの関数の計算について
関数(トランク関数とアークタンジェント)を計算したいのですが、以下のコードだと「シンボルを解釈処理できません」とメッセージが出てコンパイルできません。何か間違っているのでしょうか。 import com.nttdocomo.ui.*; public class test01 extends IApplication { private Panel p1; private Label label1,label2; public void start() { p1 = new Panel(); double num1,num2; num1 = Math.atan2(1.0,1.0); num2 = Math.trunc(1.0); label1=new Label("計算結果A "+ num1); label2=new Label("計算結果B "+ num2); p1.add(label1); p1.add(label2); Display.setCurrent(p1); } }
- ベストアンサー
- Java
- iアプリ パネル遷移の際の変数の受け渡し方について
iアプリで、パネル遷移の際に遷移元の変数を遷移先に引き渡したいのですが、その方法がわかりません。 テスト用のプログラムを作成しましたので、どなたかご教示いただければ幸いです。 ソフトキー1:終了 ソフトキー2:TextBoxのリセット ボタン:パネル遷移とTextBoxの入力文字の遷移先への引き渡し TextBox:受納したテキストの表示と送付用のテキストの入力 以上の機能をパネル'p1'と'p2'とに備え、二つのパネル間での遷移とテキストの受け渡しをしたいと思います。 ========== Test.java ========== public class testx extends IApplication { public void start() { P1 p1 = new P1(); P2 p2 = new P2(); Display.setCurrent(p1); } } ======== P1.java ======== public class P1 extends Panel implements ComponentListener, SoftKeyListener{ IApplication iapp; String str =""; Button btn1 = new Button("送る"); TextBox tb1=new TextBox("",33,1,TextBox.DISPLAY_ANY); P1(){ setTitle("P1"); HTMLLayout lm=new HTMLLayout(); setLayoutManager(lm); lm.begin(HTMLLayout.LEFT); add(tb1); add(btn1); lm.end(); setSoftKeyListener(this); setSoftLabel(SOFT_KEY_1,"終了"); setSoftLabel(SOFT_KEY_2,"リセット"); setComponentListener(this); Display.setCurrent(this); } public void componentAction(Component source,int type,int param){ if(type==BUTTON_PRESSED){ /* p2 からのテキストをstrと定義しTextBoxに表示したい。 その定義の仕方がわからない。 str = ; */ tb1.setText(str); /* TextBoxに新たに入力した文字列をstrと再定義。 変数strをp2に渡したい。 */ str = tb1.getText(); P2 p2 = new P2(); Display.setCurrent(p2); } } public void softKeyPressed(int softKey){ if(softKey==SOFT_KEY_1){ iapp.terminate(); } if(softKey==SOFT_KEY_2){ tb1.setText(""); } } public void softKeyReleased(int softKey){ } } ======== P2.java ======== public class P2 extends Panel implements ComponentListener, SoftKeyListener{ IApplication iapp; String str =""; Button btn1 = new Button("送る"); TextBox tb1=new TextBox("",33,1,TextBox.DISPLAY_ANY); P2(){ setTitle("P2"); HTMLLayout lm=new HTMLLayout(); setLayoutManager(lm); lm.begin(HTMLLayout.LEFT); add(tb1); add(btn1); lm.end(); setSoftKeyListener(this); setSoftLabel(SOFT_KEY_1,"終了"); setSoftLabel(SOFT_KEY_2,"リセット"); setComponentListener(this); Display.setCurrent(this); } public void componentAction(Component source,int type,int param){ if(type==BUTTON_PRESSED){ /* p1 からのテキストをstrと定義しTextBoxに表示したい。 その定義の仕方がわからない。 str = ; */ tb1.setText(str); /* TextBoxに新たに入力した文字列をstrと再定義。 変数strをp1に渡したい。 */ str = tb1.getText(); P1 p1 = new P1(); Display.setCurrent(p1); } } public void softKeyPressed(int softKey){ if(softKey==SOFT_KEY_1){ iapp.terminate(); } if(softKey==SOFT_KEY_2){ tb1.setText(""); } } public void softKeyReleased(int softKey){ } }
- 締切済み
- Java
- 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()); } } }
- ベストアンサー
- docomo
- 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()); } } }
- 締切済み
- Java
- private voidなメソッドはstatic コンテキストですか
コンパイルエラーで、 「static コンテキストから参照することはできません」 と表示されます。 ソースにstaticという文字は有りません。 private voidなメソッドはstatic コンテキストですか? [Foo.java] import com.nttdocomo.ui.*; public class Foo extends IApplication { public void start() { Display.setCurrent(new MyPanel()); } } class MyPanel extends Panel { private void e() { Bar.DShow(Dialog.DIALOG_ERROR, "", ""); } } [Bar.java] import com.nttdocomo.ui.*; public class Bar { public void DShow(int type, String title, String body) { Dialog d = new Dialog(type, title); d.setText(body); d.show(); } }
- ベストアンサー
- Java
- iアプリ Display#setCurrent使用での画面ちらつき
こんにちは。 iアプリを作っています。 トップメニュー、サブメニューがあり、1Canvas画面で処理するのが しんどかったので機能毎のCanvasを継承したクラスを作りました。 そのクラスをIApplicationを継承したクラス内のメソッドで Display.setCurrent()を実行して画面を切り替えていますが 切り替え時に画面がちらつきます。 どうにかちらつくことの回避方法はありませんでしょうか。 簡略したソース public class AppliMain extends IApplication { ACanvas aCanvas = null; BCanvas bCanvas = null; public void start () { aCanvas = new ACanvas ( this ); bCanvas = new BCanvas ( this ); this.showACanvas (); } public void showACanvas () { Display.setCurrent ( aCanvas ); } public void showBCanvas () { Display.setCurrent ( bCanvas ); } } public class ACanvas extends Canvas { private AppliMain parent = null; public ACanvas ( AppliMain _parent ) { parent = _parent; } public void paint ( Graphics g ) { } public void processEvent ( int type, int param ) { // BCanvasに表示切替 parent.showBCanvas(); } } public class BCanvas extends Canvas { private AppliMain parent = null; public BCanvas ( AppliMain _parent ) { parent = _parent; } public void paint ( Graphics g ) { } public void processEvent ( int type, int param ) { // ACanvasに表示切替 parent.showACanvas(); } }
- ベストアンサー
- Java
お礼
ありがとうございました。 IApplication.getCurrentApp()でいんですね。 おかげ様で解決しました。
補足
とても参考になりました。 でも、 super();で下記エラーがでます。 トークン "(" に構文エラーがあります。正しくは "." です。 なぜなんでしょう?