teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

原因部分を訂正

2017/05/11 20:00

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -159,12 +159,7 @@
159
159
  }
160
160
  ```
161
161
  ---
162
- いろいろな原因が積み重なって表示されていなかったのですが、個人的に主原因と思うのはMainFrameクラスのこの部分です。
163
- ```Java
164
- Container contentPane = getContentPane();
165
- contentPane.add(jps[i], BorderLayout.CENTER);
166
- ```
167
- FirstPanel しかContentPaneに登録してません、そしてMainFrame#changeKeyメソッドでFirstPanelをsetVisible(false);にすると親のcontentPaneが表示されて遷移したように見えるだけなのです。
162
+ MainFrame#changeKeyメソッドでFirstPanelをsetVisible(false);にすると親のcontentPaneが表示されて遷移したように見えるだけなのです。
168
163
 
169
164
  Swingのコンポーネントのデバックをする時は、
170
165
  JFrameをクリックしてフォーカスを当てた状態で**CTRL+Shit+F1**キーを押下すると、コンソールにSwingのコンポーネントツリーが出力されます。

5

setBounds の引数y 4050=> 450

2017/05/11 20:00

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -102,7 +102,8 @@
102
102
  buttonTwo.setActionCommand("Two");
103
103
 
104
104
  JButton buttonThree = new JButton("Three");
105
+ // setBounds の引数y 4050=> 450
105
- buttonThree.setBounds(256, 4050, 512, 50);
106
+ buttonThree.setBounds(256, 450, 512, 50);
106
107
  buttonThree.addActionListener(this);
107
108
  buttonThree.setActionCommand("Three");
108
109
 

4

frame\.changePanel\("Second"\);の呼び出しを追加

2017/05/11 19:54

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -138,7 +138,7 @@
138
138
  frame.changePanel("First");
139
139
  break;
140
140
  case "Two":
141
- frame.changePanel("Third");
141
+ frame.changePanel("Second");
142
142
  break;
143
143
  case "Three":
144
144
  break;

3

changeKeyの不要な引数を削除。メソッド名をchangePanelに

2017/05/11 17:04

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -55,11 +55,11 @@
55
55
  }
56
56
  }
57
57
 
58
+ // changeKey=>changePanelにメソッド名を変更して、引数を1個に
58
- public void changeKey(JPanel panel, String str) {
59
+ public void changePanel(String str) {
59
60
  int index = Arrays.asList(PanelNames).indexOf(str);
60
61
  layout.show(jps[index].getParent(), jps[index].getName());
61
62
  }
62
-
63
63
  }
64
64
  ```
65
65
  FirstPanelクラス
@@ -134,16 +134,16 @@
134
134
  switch(cmd){
135
135
 
136
136
  case "One":
137
- //MainFrame#changeKeyを呼び出
137
+ //MainFrame#changePanelを呼び出
138
- frame.changeKey(this, "First");
138
+ frame.changePanel("First");
139
139
  break;
140
140
  case "Two":
141
- frame.changeKey(this, "Second");
141
+ frame.changePanel("Third");
142
142
  break;
143
143
  case "Three":
144
144
  break;
145
145
  case "Four":
146
- frame.changeKey(this, "Third");
146
+ frame.changePanel("Third");
147
147
  break;
148
148
  case "Five":
149
149
  System.exit(0);

2

画面の管理方法について追記

2017/05/11 17:01

投稿

umyu
umyu

スコア5846

answer CHANGED
File without changes

1

画面の管理方法について追記

2017/05/11 15:44

投稿

umyu
umyu

スコア5846

answer CHANGED
@@ -166,4 +166,11 @@
166
166
  FirstPanel しかContentPaneに登録してません、そしてMainFrame#changeKeyメソッドでFirstPanelをsetVisible(false);にすると親のcontentPaneが表示されて遷移したように見えるだけなのです。
167
167
 
168
168
  Swingのコンポーネントのデバックをする時は、
169
- JFrameをクリックしてフォーカスを当てた状態で**CTRL+Shit+F1**キーを押下すると、コンソールにSwingのコンポーネントツリーが出力されます。
169
+ JFrameをクリックしてフォーカスを当てた状態で**CTRL+Shit+F1**キーを押下すると、コンソールにSwingのコンポーネントツリーが出力されます。
170
+
171
+ ---
172
+ 画面遷移の管理について
173
+ 0. 遷移を管理するためのシーンクラスを作成(シングルトン)
174
+ 0. 画面の遷移元と遷移先をツリー構造で管理する。
175
+
176
+ JFrameを継承したクラスにいろいろな処理を書くのは個人的に好きではないのでこれがベターだと思います。