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();
}
}
}
No.2ベストアンサー
- 回答日時:
補足ありがとうございます。
ざっと見たところ、KihonCoreの各メソッドで
Menu mn = new Menu();
でMenuクラスのインスタンスを生成しているのが変な動作の原因のような気がします。
Menuのインスタンスを生成した時点で別のフレーム(窓)を生成しています。
また、ボタンをアクションリスナーに登録していますが別フレームに登録していますので、
2つ目の画面から3つ目の画面に移るボタンを押したとしても
そのフレームでイベントは起こりません。
なので、KihonCoreのメソッドを呼ぶ際にMenu自身を引数とする等したほうが良いかもしれません。
lailai2580様
お忙しい中ご回答していただき、とてもうれしく思います。
大変わかりやすく、とても参考になりました!
なるほど、「Menu生成は起動イベントとして、あとで作り直そう」
と思っていたので盲点でした。知識不足でお恥ずかしいのですが
今の自分にはとても価値のある失敗だったと思います。
本来なら、ソースの修正を済まして「出来ました!」と報告するのが
礼儀だとは思いますが、別の作業が入ってしまい、ソースをいじるのは数日後になりそうです。申し訳ありません。
本を購入したり、知人に聞いたりして対応を考えていたのですが、
解決できず、ダメ元で初めてネットで書き込みさせていただきました。
わかりやすい回答、頭の中の疑問点が一気に無くなった感じです。
1日も早く質問に答えられる側になるよう、精進したいと思います。
本当にありがとうございました!
No.1
- 回答日時:
KihonCoreクラスのbtnClk_MenuAmメソッドとbtnClk_Rtnメソッドは
staticにしてもいいような気がしなくもないですが
それはさておき
質問内容がよく理解できなかったのですが
現在の状態では
>初期画面表示→//■2枚目の画面を貼り付け→//■初期画面を貼り付け(初期メニュー画面を描写)
が出来ているということですか?
それを拡張して
>初期画面→2枚目の画面→×3枚目の画面
にしたいという意味ですか?
>初期画面表示→//■2枚目の画面を貼り付け→//■初期画面を貼り付け(初期メニュー画面を描写)
これが出来ているのであれば、3枚目の画面を表示するのは同じ要領です。
出来ていないのであれば、KihonCoreクラスのbtnClk_Rtnメソッドに問題があるのではないでしょうか。
個人的に
addWindowListener(new myListener(0));
が何なのかも気になりました。
この回答への補足
lailai2580さん、ご回答ありがとうございます。
質問内容が分かりづらくてすいませんでした。
初期画面→(btn_gozen押下)→2枚目画面表示→(btn_returnボタン押下)→×3枚目(表示できず。2枚目の画面のまま)という状態です。
kihonCoreクラスのソースを記載させていただきます。
※myListenerですが「windowClosing(WindowEvent we)」時にダイアログを表示させる処理です。文字数の関係で掲載できませんでした・・・Menuクラスの「addWindowListener(new myListener(0));」をコメントアウトしても画面については同じだったので無関係だとは思います。
------------------------------------------------------------
package test;
import java.awt.*;
import javax.swing.*;
import test.Menu;
public class KihonCore {
//■2枚目の画面にてbtn_returnを押下
void btnClk_Rtn(Container c){
System.out.println("戻るボタン処理開始");
SpringLayout layout = new SpringLayout();
JPanel p01 = new JPanel();
p01.setOpaque(true);
p01.setLayout(layout);
Menu mn = new Menu();
//背景
ImageIcon title = new ImageIcon("./image/title_main.png");
JLabel t_label = new JLabel(title);
//画面ヘッダー背景
ImageIcon icon_logo01 = new ImageIcon("./image/header_whiteR.png");
JLabel logo01 = new JLabel(icon_logo01);
//画面右上ロゴ
ImageIcon icon_logo02 = new ImageIcon("./image/header_dsLogo.png");
JLabel logo02 = new JLabel(icon_logo02);
JButton btn_gozen = new JButton();
btn_gozen.addActionListener(mn);
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);
JButton btn_gogo = new JButton();
btn_gogo.setActionCommand("btn_gogo");
btn_gogo.setPreferredSize(new Dimension(118, 45));
ImageIcon icon_gogo = new ImageIcon("./image/btn_gogo.png");
btn_gogo.setIcon(icon_gogo);
JButton btn_syuuryou = new JButton("終了");
btn_syuuryou.setActionCommand("btn_syuuryou");
btn_syuuryou.setPreferredSize(new Dimension(100, 50));
btn_syuuryou.setFont(new Font("HG丸ゴシックM-PRO", Font.PLAIN, 28));
layout.putConstraint(SpringLayout.NORTH, logo02, 5,SpringLayout.NORTH, p01);
layout.putConstraint(SpringLayout.WEST, logo02, 607, SpringLayout.WEST,p01);
layout.putConstraint(SpringLayout.NORTH, btn_gozen, 90,SpringLayout.NORTH, p01);
layout.putConstraint(SpringLayout.WEST, btn_gozen, 370, SpringLayout.WEST,p01);
layout.putConstraint(SpringLayout.NORTH, btn_gogo, 185,SpringLayout.NORTH, p01);
layout.putConstraint(SpringLayout.WEST, btn_gogo, 370, SpringLayout.WEST, p01);
layout.putConstraint(SpringLayout.NORTH, btn_syuuryou, 480,SpringLayout.NORTH, p01);
layout.putConstraint(SpringLayout.WEST, btn_syuuryou, 623, SpringLayout.WEST,p01);
p01.add(btn_gozen);
p01.add(btn_gogo);
p01.add(btn_syuuryou);
p01.add(logo02);
p01.add(logo01);
p01.add(t_label);
c.add(p01);
}
//■メニュー画面にてbtn_gozen押下
void btnClk_MenuAm(Container c){
※btnClk_Rtnと同様の処理です。定義と配置は文字数の関係で省略させていただきます。(問題のボタンのみ記載・配置部品の位置等は異なっています)
JButton btn_return = new JButton("戻る");
btn_return.addActionListener(mn);
btn_return.setActionCommand("btn_return");
btn_return.setPreferredSize(new Dimension(100, 50));
layout.putConstraint(SpringLayout.NORTH, btn_return, 480,SpringLayout.NORTH, p02);
layout.putConstraint(SpringLayout.WEST, btn_return, 627, SpringLayout.WEST,p02);
p02.add(btn_gozenB01);
p02.add(btn_gozenB02);
p02.add(label_gozenB01);
p02.add(label_gozenB02);
p02.add(btn_return);
p02.add(logo02);
p02.add(logo03);
p02.add(logo01);
c.add(p02);
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java Javaプログラミングの質問になります。 ボタンを押下した時に画面遷移して 画面から戻ってきた時のi 1 2023/06/26 07:50
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Ruby vscode 文字化け 1 2022/05/21 19:17
- その他(プログラミング・Web制作) uwscのCHKING関数の画像の認識がうまくいかない。 1 2022/06/18 20:55
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- C言語・C++・C# PC画面を録画するプログラムでdllの読み込みエラー 1 2023/04/22 08:31
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
2024年に成し遂げたこと
今年も残すところわずか。 皆さんが今年達成したことを教えていただきたいです。 どんな小さなものでも構いません。
-
自分の通っていた小学校のあるある
進学したり大人になってから、「あれって自分の小学校だけだったのかな」と思うことありますよね。 逆に「他の小学校ってそんなことするの!?」と思ったり。 そんな「自分の通っていた小学校」のあるあるを教えてください!
-
店員も客も斜め上を行くデパートの福袋
シュールを通り越して店員も客も斜め上を行くデパートの福袋に入ってそうなものを教えて下さい。 よかったらレビューもしてください。
-
JPanelの切り替えと再描画
Java
-
Swing 編集不可でも選択可能なJTableセルの設定方法
Java
-
SwingでJtableのヘッダ行が表示されません
Java
-
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
三菱GOTの画面切り替えについて
-
location.hrefでページ切替時の...
-
C# ログイン画面からメイン画面...
-
CSV出力を画面から選択したデー...
-
要素が画面内に表示されている...
-
javaのstrutsを使った画面遷移...
-
MFCプログラミング
-
ASP.NET 画面遷移前の状態を保...
-
struts2Listのバインド方法がわ...
-
Java-jspの画面入力値保持について
-
非アクティブな画面を操作する...
-
VC++ デスクトップキャプチャ方法
-
ブラウザ画面で、変更した値が...
-
【C#】 FormClosingのイベント...
-
FormのsubmitでFormの内容がnull
-
C# Windowsフォーム全コントロ...
-
Strutsの情報保持の仕方について
-
window.open()使用サブウィンド...
-
登録後、呼び出し元ページに戻...
-
C言語で今まで表示していた画面...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
三菱GOTの画面切り替えについて
-
C言語で今まで表示していた画面...
-
Java-jspの画面入力値保持について
-
Javaプログラミングの質問にな...
-
画面を隠す・消す方法を教えて...
-
遷移元を判定したい!
-
ASP.NET 画面遷移前の状態を保...
-
ServletからServletへの値渡し
-
C# ログイン画面からメイン画面...
-
javaのstrutsを使った画面遷移...
-
セッション切れでのリクエスト...
-
Javascriptのhistory.back()が...
-
ruby on railsでの画面間 パラ...
-
"+"文字が" (スペース)"に文字...
-
サブミット後、自動的に画面を...
-
非アクティブな画面を操作する...
-
FormのsubmitでFormの内容がnull
-
location.hrefでページ切替時の...
-
ブラウザアドレスバーからのURL...
-
画像の縦横比固定の計算方法。
おすすめ情報