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

回答編集履歴

2

追記

2017/07/28 03:03

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,4 +1,4 @@
1
- なんというか、いろいろと不可解なコードです。
1
+ なんというか、いろいろと不可解なコードです。**(修正確認しました)**
2
2
  - **命名がおかしい**
3
3
  MainとImagePanelがJFrame?SmartScreenがJPanel?
4
4
  - **画像の取り扱いがおかしい**
@@ -38,5 +38,13 @@
38
38
  - **必要のないsetVisibleを削る**
39
39
  しっかりとGUIを組めていれば、フレームを可視化すればそれで充分です。
40
40
 
41
+ ---
42
+ 設計的に改善するとしたら、次のどっちかですかね。
43
+ - MainクラスからImagePanelを呼び出し、ImagePanelからStartPanelを呼び出す。
44
+ - Mainクラスから両方を呼び出し、ImagePanelに子としてStartScreenを与える。
45
+
46
+ 後者の方が柔軟な気もします。どんな機能を組み込むかにもよりますが。
47
+ ともかく、インタフェースを意識して作る必要はあるでしょう。
48
+
41
49
  不明な点がありましたらコメントにてお知らせ下さい。
42
50
  コードを見せちゃった方が早いんですが、質問者様のデバッグの機会を奪いたくないので。

1

追記

2017/07/28 03:03

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -11,4 +11,32 @@
11
11
  せっかくlayout用意したのに使わないんですか?
12
12
 
13
13
  もっと簡潔に書けるはずです。
14
- 重複して書いているからフレームも二つ出て、処理の順序が前後しているからまっしろです。
14
+ 重複して書いているからフレームも二つ出て、処理の順序が前後しているからまっしろです。
15
+
16
+ 追記
17
+ ---
18
+ デバッグしてみましたが、それなりの量書き換える必要がありました。
19
+ 要点は次のとおりです。
20
+ - **pack()とsetVisible(true)の呼ばれるタイミングを適切にする**
21
+ これらのメソッドはその性格上、コンポーネントの配置がすべて終わった時に呼ばれるべきです。
22
+ - **SmartScreenがパネルとして機能していない**
23
+ フィールドのmainpaneに対して操作をしているので、SmartScreenのインスタンスjpは真っ白です。
24
+ - **パネルの親子関係に意識を向ける**
25
+ 下記のコードを見る限り、mainpaneはbackpaneの子なのですよね?
26
+ > ```Java
27
+ > backpane.add(mainpane);
28
+ > ```
29
+
30
+ メインとなるフレームから子を直接呼び出すのはおかしな設計です。
31
+ - **フレームに与えるのは親のパネル**
32
+ 直前の項と重複しますが、子をaddしてどうするんです?
33
+ > ```Java
34
+ > StartScreen jp = new StartScreen();
35
+ > main.getContentPane().add(jp);
36
+ > ```
37
+
38
+ - **必要のないsetVisibleを削る**
39
+ しっかりとGUIを組めていれば、フレームを可視化すればそれで充分です。
40
+
41
+ 不明な点がありましたらコメントにてお知らせ下さい。
42
+ コードを見せちゃった方が早いんですが、質問者様のデバッグの機会を奪いたくないので。