プロが教えるわが家の防犯対策術!

Javaでswingを使って小さなアプリを作っています。
今やりたいのはパネルstart で名前入力 → mainパネル その名前でようこそと表示 の流れをまず作ろうとしているのですが、名前がどうしても渡せず、
今回setterPersonというメソッドで人クラスを代入しなおしているのですが、コード上で
System.out.println(main.gettererPerson());
main.setterPerson(p);
main.gettererPerson();
main.setVisible(true);
書いて試しに実行したら
入力前の値
入力後の値
がしっかりコンソールで表示されている。のにもかかわらずmain.setVisible(true);を実行すると
表示画面には入力前の値の名前が表示されていて、値が渡ってないということです。
どなたか何故このmain.setVisible(true);では値が渡らなかったのか教えていただけると幸いです。
また、今回Javaを勉強するために始めたのですが、swingは私が作りたいアプリ(今回は人クラス、服クラス、店クラス、でファッションをきせかえさせるというアイディアでした。)には向いてないように思いました。どなたかより良い言語かやり方を知っていいたら教えていただきたいです。

問題のコード↓
これはパネルを管理するクラスです。
package fashiongui;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class Fashionbattle extends JFrame {
public String[] PanelNames = {"start","main","hat","afterbought"};
StartPanel start = new StartPanel(this,PanelNames[0]);
MainPanel main = new MainPanel(this,PanelNames[1]);
HatShopPanel hat = new HatShopPanel(this,PanelNames[2]);
AfterBoughtPanel afterbought = new AfterBoughtPanel(this,PanelNames[3]);

Fashionbattle(String title){
this.add(start);start.setVisible(true);
this.add(main);main.setVisible(false);
this.add(hat);hat.setVisible(false);
this.add(afterbought);afterbought.setVisible(false);
this.setBounds(100, 100, 1000, 700);
}
public static void main(String[] args) {
// TODO 自動生成されたメソッド・スタブ
Fashionbattle frame = new Fashionbattle("Fashion Battle");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public void PanelChange(JPanel jp, String str,Person p){

System.out.println(jp.getName());
String name = jp.getName();
if(name==PanelNames[0]){
start = (StartPanel)jp;
start.setVisible(false);
}else if(name==PanelNames[1]){
main = (MainPanel)jp;
main.setVisible(false);
}else if(name==PanelNames[2]){
hat = (HatShopPanel)jp;
hat.setVisible(false);
}else if(name==PanelNames[3]){
afterbought = (AfterBoughtPanel)jp;
afterbought.setVisible(false);
}
if(str==PanelNames[0]){
start.setVisible(true);
}else if(str==PanelNames[1]){
System.out.println(main.gettererPerson());
main.setterPerson(p);
main.gettererPerson();
main.setVisible(true);
}else if(str==PanelNames[2]){
hat.setterPerson(p);
hat.setVisible(true);
}else if(str==PanelNames[3]){
afterbought.setterPerson(p);
afterbought.setVisible(true);
}
}
}

「Javaでswingの画面変わる際に他の」の質問画像

質問者からの補足コメント

  • start Panelです。

    「Javaでswingの画面変わる際に他の」の補足画像1
      補足日時:2017/04/01 13:37
  • mainパネルになります

    「Javaでswingの画面変わる際に他の」の補足画像2
      補足日時:2017/04/01 17:56
  • Person クラスです

    「Javaでswingの画面変わる際に他の」の補足画像3
      補足日時:2017/04/01 17:56
  • PanelChangeに引数としてPerson pを渡せるように書いて、startPanelで入力と同時に作成したPersonのインスタンスを渡しています。
    そのpをPanelChangeのメソッド内で他のパネルのメソッドであるsetterpersonで設定しという流れで現在は値の渡しをしようとしています。

      補足日時:2017/04/01 18:00

A 回答 (2件)

名前を表示する JLabel はどこで mainパネルに張り付けてますか?



あと「setterPerson」とか「gettererPerson」とかのメソッド名の意味が分かんない.
    • good
    • 0

問題の確認に必要なコードをすべて提示しないことには、有効な回答は得られないでしょう。


コードが長すぎるのであれば、直面している問題”だけ”が再現するコンパクトなプログラムを書き起こして、それで質問するべきでしょう。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!