【swing】ボタンクリックにより、パネルごとの差し替えを行う
javaをはじめて2週間の_tonnuraと申します。
swingを用いて1枚のフレームに対し、ボタンクリックにより
画面遷移を行っていくアプリを作成しています。
最初の画面での画面遷移は成功するのですが、
その画面からの遷移のために、別のパネルを加えると画面が更新されません。初期画面→2枚目の画面→×3枚目の画面(2枚目のまま)
「getContentPane().list(System.out)」で確認したところ、物はあるようなので、「validate()」をかけているのですが変化なしです。
過去の質問に解決方法があると思い、検索で「QNo.196900 クリックでGUI部品を追加する」を見つけたのですが、コンポーネントに対するremoveAll後のvalidate()だけでは対処できませんでした。
以下にソースを記載します。
汚くて申し訳ありませんが、ご解答いただければ嬉しく思います。
※actionPerformedにて、「KihonCore kihonC」に飛ばしていますが
処理として「各部品の定義・配置・新たに定義したパネルへのセット後 パネルをコンポーネントへ配置」を行っています。
※画面遷移の順序としては
初期画面表示→//■2枚目の画面を貼り付け→//■初期画面を貼り付け(初期メニュー画面を描写)となっています。
------------------------------------------------------------
package test;
import java.awt.*;
import javax.swing.*;
import test.KihonCore.myListener;
public class Menu extends JFrame implements ActionListener {
public static void main(String[] args) {
Menu frame_m = new Menu();
frame_m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame_m.setTitle("画面遷移テスト");
frame_m.setBounds(10, 10, 750, 570);
frame_m.setVisible(true);
frame_m.setResizable(false);
}
Menu() {
SpringLayout layout = new SpringLayout();
JPanel panel_menu = new JPanel();
panel_menu.setLayout(layout);
JButton btn_gozen = new JButton();
tn_gozen.addActionListener(this);
btn_gozen.setActionCommand("btn_gozen");
btn_gozen.setPreferredSize(new Dimension(118, 45));
ImageIcon icon_gozen = new ImageIcon("./image/btn_gozen.png");
btn_gozen.setIcon(icon_gozen);
panel_menu.add(btn_gozen);
getContentPane().add(panel_menu);
validate();
addWindowListener(new myListener(0));
System.out.println("起動直後の画面状態");
getContentPane().list(System.out);
}
public void actionPerformed(ActionEvent ae) {
String cmd = ae.getActionCommand();
try {
if (cmd.equals("btn_gozen")) {
//■2枚目の画面を貼り付け
getContentPane().removeAll();
KihonCore kihonC = new KihonCore();
kihonC.btnClk_MenuAm(getContentPane());
validate();
System.out.println("2画面目遷移後の画面状態");
getContentPane().list(System.out);
} else if (cmd.equals("btn_b01")) {
System.out.println("2画面目の1が押されました。");
} else if (cmd.equals("btn_b02")) {
System.out.println("2画面目の2が押されました。。");//
} else if (cmd.equals("btn_seiseki")) {
System.out.println("メニューボタン4が押下されました。");
} else if (cmd.equals("btn_syuuryou")) {
System.out.println("終了ボタンが押下されました。");
int option = JOptionPane.showConfirmDialog(null, "終了しますか?", "終了確認", JOptionPane.YES_NO_OPTION);
if (option == JOptionPane.YES_OPTION) {
System.out.println("はいを選択:終了");
System.exit(0);
} else if (option == JOptionPane.NO_OPTION) {
System.out.println("いいえを選択:終了しない");
return;
}
} else if (cmd.equals("btn_return")) {
System.out.println("戻るボタンが押下されました。");
//■初期画面を貼り付け(初期メニュー画面を描写
getContentPane().removeAll();
KihonCore kihonC = new KihonCore();
kihonC.btnClk_Rtn(getContentPane());
validate();
System.out.println("2画面目にて戻るを押した直後の画面状態");
getContentPane().list(System.out);
}
} catch (Exception e) {
System.out.println("エラーが発生しました");
e.printStackTrace();
}
}
}