回答編集履歴

5

反映されないーーーー。

2018/01/06 13:53

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -194,11 +194,7 @@
194
194
 
195
195
  add(lblScore);
196
196
 
197
-
198
-
199
- }
197
+ }
200
-
201
-
202
198
 
203
199
  }
204
200
 

4

文字色の変更が抜けていたので追記

2018/01/06 13:53

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -156,8 +156,6 @@
156
156
 
157
157
  public class GameOver extends JPanel {
158
158
 
159
-
160
-
161
159
  /**
162
160
 
163
161
  * Create the panel.
@@ -176,6 +174,10 @@
176
174
 
177
175
  JLabel lblGameOver = new JLabel("GameOver");
178
176
 
177
+ // 文字色を赤色にする。
178
+
179
+ lblGameOver.setForeground(Color.RED);
180
+
179
181
  lblGameOver.setVerticalAlignment(SwingConstants.TOP);
180
182
 
181
183
  lblGameOver.setHorizontalAlignment(SwingConstants.CENTER);
@@ -186,6 +188,8 @@
186
188
 
187
189
  JLabel lblScore = new JLabel("Score");
188
190
 
191
+ lblScore.setForeground(Color.RED);
192
+
189
193
  lblScore.setHorizontalAlignment(SwingConstants.CENTER);
190
194
 
191
195
  add(lblScore);

3

countdown_secの判定が誤っていたので修正。

2018/01/06 13:52

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -92,25 +92,27 @@
92
92
 
93
93
  label.setText(String.valueOf(countdown_sec));
94
94
 
95
+ if (countdown_sec ==-1){
96
+
97
+ timer.stop();
98
+
99
+ showPanel("gameover_window");
100
+
101
+ return;
102
+
103
+ }
104
+
95
105
  countdown_sec--;
96
106
 
97
- if (countdown_sec == -1) {
98
-
99
- timer.stop();
100
-
101
- // GameOver画面に表示を切り替える。
102
-
103
- showPanel("gameover_window");
104
-
105
- }
106
-
107
107
  });
108
108
 
109
109
  JPanel game_over = new GameOver();
110
110
 
111
111
  add(game_over, "gameover_window");
112
112
 
113
-
113
+ // コンストラクタ内からTimer(別スレッド)をスタートするのはスレッドの可視性の関係上あまり良くないです。
114
+
115
+ // frame.setVisible(true);後に別のメソッドより、timer.startを呼び出す形に変更したほうがいいです。
114
116
 
115
117
  timer.start();
116
118
 

2

コンポネントツリーの出力を追記

2018/01/06 02:26

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -197,3 +197,9 @@
197
197
  }
198
198
 
199
199
  ```
200
+
201
+
202
+
203
+ □補足
204
+
205
+ 作った画面のSwingのコンポーネント配置が知りたい時は画面をクリックした状態で、Ctrl+Shift+F1キーを押下すると、Swingのコンポーネントツリーがコンソールに出力されます。

1

内容を追記

2018/01/05 12:31

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -1,10 +1,18 @@
1
+ 質問文のソースコードがJFrame#paintをオーバーライドしている状態で、
2
+
1
- レイアウトマネージャをCardLayoutにして、GameOverパネルに表示切り替えサンプルソースコードす。
3
+ ContentPaneJPanel (labelPanel)追加しているコードなため、描画処理の依存関係が破綻しています。
4
+
5
+ paint処理を治すのが手間なので、アプローチ方法を変更しました。
6
+
7
+
8
+
9
+ JFrameのレイアウトマネージャを[CardLayout](https://docs.oracle.com/javase/jp/8/docs/api/java/awt/CardLayout.html)にして、GameOverパネルに表示を切り替えるサンプルソースコードです。
2
10
 
3
11
  □注意点
4
12
 
5
- Swingのコンポーネントを継承したクラスでpaintメソッドはオーバライドしないでください。
13
+ Swingのコンポーネント(JFrame/JPanel)を継承したクラスでpaintメソッドはオーバライドしないでください。
6
14
 
7
- どうしてもオーバーライドしたい時はpaintComponentsをオーバーライドしてください。
15
+ どうしてもオーバーライドしたい時は[paintComponent](https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JComponent.html#paintComponent-java.awt.Graphics-)をオーバーライドしてください。
8
16
 
9
17
 
10
18