回答編集履歴

3

大幅に修正。awtが頭にこびりついてた。

2017/06/28 09:43

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,18 +1,16 @@
1
- 結果的に的外れ解答てしまったので、修正します。
1
+ とんちんかんこと言ってしまったので、大幅に修正します。
2
2
 
3
3
 
4
4
 
5
- JavaのGUIにはpaintメソッドというものがありましてこれが呼ばれたときに画面への描画が実行されます。
5
+ paintComponentメソッド、画面への描画が必要な際に、自動的に呼び出されます。
6
6
 
7
- paintメソッドは自動的に呼び出され、例えばsetVisibleが呼ばれたとき、画面サイズが変更されたときなどに呼ばれます。
7
+ 呼び出されるタイミングとしては、setVisibleが呼ばれたとき、ウィンドウサイズが変更されたときなどす。
8
8
 
9
- ひょっとしたら、元のプログラムでも、ウィンドウをマウスでぐいぐいっ張れば正しく表示されたかもしれません。
9
+ 質問者様最初のプログラムでも、画面表示後にぐいぐいウィンドウを引き延ばせば、ともすれば描画が行われたかもしれません。
10
10
 
11
11
 
12
12
 
13
- ただし、paintメソッドはユーザーが意識的に呼び出すために作られたものではありません。
14
-
15
- 画面再描画を意図的に行いたい場合は、repaintメソッド呼び出しす。
13
+ [こちらサイト](https://allabout.co.jp/gm/gc/80697/)に書いてありますように、明示的にpaintComponentを呼び出したい際には、repaintメソッド呼び出しが必要です。
16
14
 
17
15
 
18
16
 
@@ -32,15 +30,9 @@
32
30
 
33
31
 
34
32
 
35
- ---
36
-
37
- paintメソッドをオーバーライドし、適当に`Called!`とでも表示するようにすれば、呼び出されるタイミングがわかります。
38
-
39
- 描画が想定通りにならない場合、こういう泥臭いデバッグ(いわゆるprintデバッグ)が役に立ちます。
40
33
 
41
34
 
42
-
43
- 以降、以前の解答。
35
+ 以降、最初の解答。
44
36
 
45
37
 
46
38
 

2

解説の変更

2017/06/28 09:43

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,6 +1,54 @@
1
- swingの`JComponent`クラスは、awtの`Component`クラス継承しているのですが、
1
+ 結果的に的外れな解答をしてしまったので、修正しま
2
2
 
3
+
4
+
5
+ JavaのGUIにはpaintメソッドというものがありまして、これが呼ばれたときに画面への描画が実行されます。
6
+
7
+ paintメソッドは自動的に呼び出され、例えばsetVisibleが呼ばれたとき、画面サイズが変更されたときなどに呼ばれます。
8
+
9
+ ひょっとしたら、元のプログラムでも、ウィンドウをマウスでぐいぐい引っ張れば正しく表示されたかもしれません。
10
+
11
+
12
+
13
+ ただし、paintメソッドはユーザーが意識的に呼び出すために作られたものではありません。
14
+
15
+ 画面の再描画を意図的に行いたい場合は、repaintメソッドを呼び出します。
16
+
17
+
18
+
19
+ 0. フレームの初期化
20
+
21
+ 0. setVisible(true);
22
+
23
+ 0. パネルの初期化
24
+
25
+ 0. パネルをadd
26
+
27
+ 0. **repaint()**
28
+
29
+
30
+
31
+ こうすれば、正しい表示が得られるかと思います。
32
+
33
+
34
+
35
+ ---
36
+
37
+ paintメソッドをオーバーライドし、適当に`Called!`とでも表示するようにすれば、呼び出されるタイミングがわかります。
38
+
39
+ 描画が想定通りにならない場合、こういう泥臭いデバッグ(いわゆるprintデバッグ)が役に立ちます。
40
+
41
+
42
+
43
+ 以降、以前の解答。
44
+
45
+
46
+
47
+ ---
48
+
49
+ swingのJComponentクラスは、awtのComponentクラスを継承しているのですが、
50
+
3
- `Component`クラスには、`add`メソッドと`remove`メソッドが既に存在しています。
51
+ Componentクラスには、addメソッドとremoveメソッドが既に存在しています。
4
52
 
5
53
 
6
54
 

1

作文的にひどかった

2017/06/28 09:29

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,7 +1,9 @@
1
1
  swingの`JComponent`クラスは、awtの`Component`クラスを継承しているのですが、
2
2
 
3
- `Component`クラスには、既に`add`メソッド`remove`メソッドが既に存在しています。
3
+ `Component`クラスには、`add`メソッド`remove`メソッドが既に存在しています。
4
4
 
5
5
 
6
6
 
7
7
  ご自身でメソッドを定義する際は、ほかのクラスのメソッドと名前が衝突しないようにしてください。
8
+
9
+ 動詞1単語の命名は簡潔ですが、このような問題が生じる場合がしばしばあります。