- 締切済み
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){ } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- teketon
- ベストアンサー率65% (141/215)
値を受け渡し用のクラスを作って、それを通して渡せばよいのでは? class Value{ private String str; public void setString(String str){this.str=str;} public String getString(){return this.str;} } public void start() { P1 p1 = new P1(); P2 p2 = new P2(); Vaue v = new Value(); p1.setValue(v); p2.setValue(v); Display.setCurrent(p1); } で、componentActionメソッド内で、Valueのインスタンスから受け取れば良いと思います。 あと、componentActionメソッドでP1、P2をnewすると P1→P2→P1→P2とどんどんインスタンスを追加していくので、リソースを食うんじゃないかな。
補足
クラスValueをp1、p2にどのように適用してよいものか、わからなかったので、 P1.java、P2.javaはそのままにして、とりあえず、ご教示された通り、Valueクラスをつくり、Test.javaだけでも書き換えてコンパイルしてみました。 すると、Test.java中の、 p1.setValue(v); p2.setValue(v); について、 シンボル:メソッド setValue(Value) 「シンボルが見つかりません」というエラーがでました。 ========== Value.java ========== class Value{ private String str; public void setString(String str){ this.str=str; } public String getString(){ return this.str; } } ========== Test.java ========== public class testx extends IApplication { public void start() { P1 p1 = new P1(); P2 p2 = new P2(); Value v = new Value(); p1.setValue(v);// エラー p2.setValue(v);// エラー Display.setCurrent(p1); } } ご助言頂いたValueクラスなのですが、意図されていることが今ひとつよく理解できません。 String 型の変数strをオブジェクトとして生成するクラスで、この変数strには戻り値がそのまま適用される、という風にクラスValueを解釈してよければ、 p1(p2)で 新たに入力されたテキストを、このパネルp1(p2)の変数strとして新たに設定し直すというようなことが意図されているのでしょうか。 また、そのようなことを、エラーが出た記述、p1.setValue(v)、p2.setValue(v)は意味しているのでしょうか。 もし私の理解に誤りがあるなら、お詫びしなければなりませんが、 Valueをp1(p2)の変数strの再設定に使用したとしても、遷移した先のp2(p1)で変数strを参照するために、パネルクラスP1(P2)をインスタンス化した時点で、初期設定の空文字 の状態に戻ってしまうことにならないでしょうか。