質問: 例として Panel1のtextFieldに数字を入力しbutton1を押すと 数字がインクリメントされた後、Panel2にパネル遷移し labelにインクリメントされた数字が表示されるはず というものを作ってみたのですが Panel2にPanel1で入力した数字を受け渡すことが できません。 どなたか原因のわかる方、アドバイスしていただけると 幸いです。 長くなりすぎてしまうので、コンポーネントやレイアウト の宣言などの部分は割愛させていただきます //MainFrameはボーダーレイアウト public class MainFrame extends javax.swing.JFrame{ //パネルの遷移するためのフラグ private boolean changeFlag1=true; private boolean changeFlag2; Panel1 p1; Panel2 p2; public MainFrame(){ this.p1=new Panel1(this); this.p2=new Panel2(this); changePage(); } //パネルを遷移させるためのメソッド public void changePage(){ if(changeFlag1==true){ setChangeFlag1(false); setChangeFlag2(false); getContentPane().add(p1); getContentPane().remove(p2); pack(); } if(changeFlag2==true){ setChangeFlag1(false); setChangeFlag2(false); getContentPane().add(p2); getContentPane().remove(p1); pack(); } } public void setChangeFlag1(boolean changeFlag1){ this.changeFlag1=changeFlag1; } public void setChangeFlag2(boolean changeFlag2){ this.changeFlag2=changeFlag2; } } //インクリメントされる値を入力するためのクラス public class Panel1 extends javax.swing.JPanel{ MainFrame mf; Increment in; int num; public Panel1(MainFrame mf){ this.mf=mf; } private void button1MouseClicked (java.awt.event.MouseEvent evt){ in=new Increment(Integer.parseInt(textField. getText()); mf.setChangeFlag1(true); mf.changePage(); } //インクリメント後の値を返すためのメソッド public int getNum(){ return num; } } //インクリメントされた値を表示するためのクラス public class Panel2 extends javax.swing.JPanel{ MainFrame mf; Increment in; Panel1 p1; public Panel2(MainFrame mf){ this.mf=mf; } private void button2MouseClicked(java.awt.event.MouseEvent evt){ mf.setChangeFlag2(true); mf.changePage(); } private void formAncestorAdded(javax.swing.event.AncestorEvent evt){ p1=new Panel1(mf); in=new Increment(p1.getNum()); label.setText(String.valueOf(in.getNum())); } } //引数をインクリメントして返すためのクラス public class Increment{ int num; public Increment(int num){ num++; this.num=num; } public int getNum(){ return num; } }
回答: Panel2#formAncestorAdded() メソッド内にて、 > p1=new Panel1(mf); Panel1 を new していますが、 これは、 MainFrame()内で、new されている > this.p1=new Panel1(this); とは別のインスタンスになります。 ですから、 Panel2#formAncestorAdded() メソッド内にて、 > p1.getNum() をしても、MainFrame内のp1は取れませんよ。 値の受け渡しをしたいなら、同一のインスタンスを参照してみてください。