回答編集履歴
8
追記
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
<< 原因 >>
|
2
2
|
|
3
|
-
`scene1`
|
3
|
+
`scene1`は`JPanel`のコンストラクタで`BorderLayout`を指定していない かつ `setLayout`を呼び出していないからです。
|
4
4
|
|
5
5
|
|
6
6
|
|
@@ -18,17 +18,17 @@
|
|
18
18
|
|
19
19
|
<< 理由 >>
|
20
20
|
|
21
|
-
`scene1`のレイアウト
|
21
|
+
`scene1`のレイアウトが指定されていないため、レイアウトは`FlowLayout`になります。
|
22
22
|
|
23
|
-
> [JPanelのコンストラクタ](https://docs.oracle.com/javase/jp/9/docs/api/javax/swing/JPanel.html#JPanel--)
|
23
|
+
> [JPanelのコンストラクタ](https://docs.oracle.com/javase/jp/9/docs/api/javax/swing/JPanel.html#JPanel--) 引用部分の太文字は引用者強調
|
24
24
|
|
25
|
-
> ダブル・バッファおよびフロー・レイアウトで新しいJPanelを作成します。
|
25
|
+
> ダブル・バッファおよび**フロー・レイアウト**で新しいJPanelを作成します。
|
26
26
|
|
27
27
|
|
28
28
|
|
29
29
|
> [FlowLayoutクラス](https://www.javadrive.jp/tutorial/flowlayout/)
|
30
30
|
|
31
|
-
FlowLayoutクラスは左から順番に右に向かってコンポーネントを追加していくレイアウトマネージャーです。
|
31
|
+
FlowLayoutクラスは**左から順番に右に向かって**コンポーネントを追加していくレイアウトマネージャーです。
|
32
32
|
|
33
33
|
|
34
34
|
|
@@ -80,7 +80,11 @@
|
|
80
80
|
|
81
81
|
`Swing`で`FlowLayout`以外の`Layout`を使う時は以下の2つが**必ず必要**です。
|
82
82
|
|
83
|
-
a. `JPanel`のコンストラクタまたは`JPanel#setLayout`で`
|
83
|
+
a. `JPanel`のコンストラクタまたは`JPanel#setLayout`で`Layout`を指定する。
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
質問コードの`CardLayout`を元に例示すると
|
84
88
|
|
85
89
|
```Java
|
86
90
|
|
@@ -98,7 +102,7 @@
|
|
98
102
|
|
99
103
|
|
100
104
|
|
101
|
-
b. `JPanel#add`
|
105
|
+
b. `JPanel#add`の第二引数でコンポーネントの配置位置を指定する。(例外があります※1)
|
102
106
|
|
103
107
|
```Java
|
104
108
|
|
@@ -108,7 +112,9 @@
|
|
108
112
|
|
109
113
|
|
110
114
|
|
111
|
-
※1 `Absolute Layout`
|
115
|
+
※1 `Absolute Layout`、`GridBagLayout`、etc
|
116
|
+
|
117
|
+
ここでは書ききれないので、使用したいレイアウトマネージャのドキュメントを確認してくださいな。
|
112
118
|
|
113
119
|
|
114
120
|
|
7
追記
test
CHANGED
@@ -68,7 +68,7 @@
|
|
68
68
|
|
69
69
|
|
70
70
|
|
71
|
-
※`Java9`以降は`Ctrl+Shift+F1`キーは無効化されているので、`frame.
|
71
|
+
※`Java9`以降は`Ctrl+Shift+F1`キーは無効化されているので、`frame.setVisible(true);`後に`frame.list();`をソースコードに追記してくださいな。
|
72
72
|
|
73
73
|
|
74
74
|
|
6
追記
test
CHANGED
@@ -40,7 +40,7 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
-
`Ctrl+Shift+F1`で表示される、質問文の`Swing`コンポーネントツリーは以下です。
|
43
|
+
`Ctrl+Shift+F1`で表示される、質問文の`Swing`コンポーネントツリーは以下です。(※)
|
44
44
|
|
45
45
|
```Java
|
46
46
|
|
@@ -65,6 +65,10 @@
|
|
65
65
|
|
66
66
|
|
67
67
|
`layout`属性に`BorderLayout`が存在しない=`BorderLayout`を指定していない。
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
※`Java9`以降は`Ctrl+Shift+F1`キーは無効化されているので、`frame.list(System.out);`をソースコードに追記してくださいな。
|
68
72
|
|
69
73
|
|
70
74
|
|
5
typo
test
CHANGED
@@ -1,16 +1,24 @@
|
|
1
|
+
<< 原因 >>
|
2
|
+
|
1
|
-
|
3
|
+
`scene1`に`setLayout`または`JPanel`のコンストラクタで`BorderLayout`を指定していないからです。
|
4
|
+
|
5
|
+
|
2
6
|
|
3
7
|
```Java
|
4
8
|
|
5
|
-
JPanel scene1 = new JPanel();
|
9
|
+
JPanel scene1 = new JPanel(new BorderLayout()); // コンストラクタ指定 (※お勧め)
|
6
10
|
|
7
|
-
scene1.setLayout(new BorderLayout());
|
11
|
+
scene1.setLayout(new BorderLayout()); // またはsetLayout指定
|
8
12
|
|
9
13
|
```
|
10
14
|
|
15
|
+
どちらかをコードに追加してくださいな。
|
11
16
|
|
12
17
|
|
18
|
+
|
19
|
+
<< 理由 >>
|
20
|
+
|
13
|
-
|
21
|
+
`scene1`のレイアウトを指定していないので、デフォルトレイアウトの`FlowLayout`になります。
|
14
22
|
|
15
23
|
> [JPanelのコンストラクタ](https://docs.oracle.com/javase/jp/9/docs/api/javax/swing/JPanel.html#JPanel--)
|
16
24
|
|
@@ -21,6 +29,14 @@
|
|
21
29
|
> [FlowLayoutクラス](https://www.javadrive.jp/tutorial/flowlayout/)
|
22
30
|
|
23
31
|
FlowLayoutクラスは左から順番に右に向かってコンポーネントを追加していくレイアウトマネージャーです。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
---
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
<< デバック方法 >>
|
24
40
|
|
25
41
|
|
26
42
|
|
@@ -56,7 +72,9 @@
|
|
56
72
|
|
57
73
|
|
58
74
|
|
75
|
+
<< まとめ >>
|
76
|
+
|
59
|
-
|
77
|
+
`Swing`で`FlowLayout`以外の`Layout`を使う時は以下の2つが**必ず必要**です。
|
60
78
|
|
61
79
|
a. `JPanel`のコンストラクタまたは`JPanel#setLayout`で`FlowLayout`以外という旨を`Swing`に通知する。
|
62
80
|
|
4
追記
test
CHANGED
@@ -11,6 +11,16 @@
|
|
11
11
|
|
12
12
|
|
13
13
|
前回とほぼ一緒で、`scene1`のレイアウトを指定していないので、規定レイアウトの`FlowLayout`になるという点。
|
14
|
+
|
15
|
+
> [JPanelのコンストラクタ](https://docs.oracle.com/javase/jp/9/docs/api/javax/swing/JPanel.html#JPanel--)
|
16
|
+
|
17
|
+
> ダブル・バッファおよびフロー・レイアウトで新しいJPanelを作成します。
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
> [FlowLayoutクラス](https://www.javadrive.jp/tutorial/flowlayout/)
|
22
|
+
|
23
|
+
FlowLayoutクラスは左から順番に右に向かってコンポーネントを追加していくレイアウトマネージャーです。
|
14
24
|
|
15
25
|
|
16
26
|
|
@@ -46,9 +56,9 @@
|
|
46
56
|
|
47
57
|
|
48
58
|
|
49
|
-
纏めると`Swing`で`FlowLayout`
|
59
|
+
纏めると`Swing`で`FlowLayout`以外のLayoutを使う時は以下の2つが**必ず必要**です。
|
50
60
|
|
51
|
-
a. `JPanel#setLayout`で`FlowLayout`以外
|
61
|
+
a. `JPanel`のコンストラクタまたは`JPanel#setLayout`で`FlowLayout`以外という旨を`Swing`に通知する。
|
52
62
|
|
53
63
|
```Java
|
54
64
|
|
@@ -66,13 +76,17 @@
|
|
66
76
|
|
67
77
|
|
68
78
|
|
69
|
-
b. `JPanel#add`時の第二引数でコンポーネントの配置位置を指定する。
|
79
|
+
b. `JPanel#add`時の第二引数でコンポーネントの配置位置を指定する。(※1)
|
70
80
|
|
71
81
|
```Java
|
72
82
|
|
73
83
|
this.panel.add(scene1, "menue"); // ←この行
|
74
84
|
|
75
85
|
```
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
※1 `Absolute Layout`の場合は、コンポーネント(`JLabel`)側で位置を指定します。
|
76
90
|
|
77
91
|
|
78
92
|
|
3
嫌味ぽくなってるので、削除。
test
CHANGED
@@ -12,11 +12,9 @@
|
|
12
12
|
|
13
13
|
前回とほぼ一緒で、`scene1`のレイアウトを指定していないので、規定レイアウトの`FlowLayout`になるという点。
|
14
14
|
|
15
|
-
うーん、[前回、デバックの仕方](https://teratail.com/questions/141158)について回答しましたが、分かりづらかったですか?
|
16
15
|
|
17
16
|
|
18
|
-
|
19
|
-
`Ctrl+Shift+F1`で表示される、質問文のコンポーネントツリーは以下です。
|
17
|
+
`Ctrl+Shift+F1`で表示される、質問文の`Swing`コンポーネントツリーは以下です。
|
20
18
|
|
21
19
|
```Java
|
22
20
|
|
@@ -44,7 +42,13 @@
|
|
44
42
|
|
45
43
|
|
46
44
|
|
45
|
+
---
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
纏めると`Swing`で`FlowLayout`と`Absolute Layout`以外を使う時は以下の2つが**必ず必要**です。
|
50
|
+
|
47
|
-
a. `
|
51
|
+
a. `JPanel#setLayout`で`FlowLayout`以外の`Layout`という旨を`Swing`に通知する。
|
48
52
|
|
49
53
|
```Java
|
50
54
|
|
@@ -56,7 +60,13 @@
|
|
56
60
|
|
57
61
|
```
|
58
62
|
|
63
|
+
■参考情報
|
64
|
+
|
65
|
+
[レイアウトマネージャーの設定](https://www.javadrive.jp/tutorial/jpanel/index4.html)
|
66
|
+
|
67
|
+
|
68
|
+
|
59
|
-
b. `JPanel#add`時の第二引数で
|
69
|
+
b. `JPanel#add`時の第二引数でコンポーネントの配置位置を指定する。
|
60
70
|
|
61
71
|
```Java
|
62
72
|
|
@@ -65,8 +75,6 @@
|
|
65
75
|
```
|
66
76
|
|
67
77
|
|
68
|
-
|
69
|
-
この2つが必要で、質問文のコードは`setLayout`が無いです。
|
70
78
|
|
71
79
|
■参考情報
|
72
80
|
|
2
追記
test
CHANGED
@@ -44,7 +44,7 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
-
|
47
|
+
a. `Swing`の画面は`setLayout`で全体(`JPanel`)のレイアウトを指定。
|
48
48
|
|
49
49
|
```Java
|
50
50
|
|
@@ -56,7 +56,7 @@
|
|
56
56
|
|
57
57
|
```
|
58
58
|
|
59
|
-
|
59
|
+
b. `JPanel#add`時の第二引数でどこに配置するのかを指定。
|
60
60
|
|
61
61
|
```Java
|
62
62
|
|
1
追記
test
CHANGED
@@ -16,9 +16,9 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
|
19
|
-
Ctrl+Shift+F1で表示される、質問文のコンポーネントツリーは以下です。
|
19
|
+
`Ctrl+Shift+F1`で表示される、質問文のコンポーネントツリーは以下です。
|
20
20
|
|
21
|
-
```
|
21
|
+
```Java
|
22
22
|
|
23
23
|
javax.swing.JPanel[null.contentPane,0,0,982x653,
|
24
24
|
|
@@ -44,10 +44,38 @@
|
|
44
44
|
|
45
45
|
|
46
46
|
|
47
|
+
0. `Swing`の画面は`setLayout`で全体(`JPanel`)のレイアウトを指定。
|
48
|
+
|
49
|
+
```Java
|
50
|
+
|
51
|
+
this.panel = new JPanel();
|
52
|
+
|
53
|
+
this.layer = new CardLayout();
|
54
|
+
|
55
|
+
this.panel.setLayout(this.layer); // ←この行
|
56
|
+
|
57
|
+
```
|
58
|
+
|
59
|
+
0. `add`時の第二引数で`JPanel`のどこに配置するのかを指定。
|
60
|
+
|
61
|
+
```Java
|
62
|
+
|
63
|
+
this.panel.add(scene1, "menue"); // ←この行
|
64
|
+
|
65
|
+
```
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
この2つが必要で、質問文のコードは`setLayout`が無いです。
|
70
|
+
|
71
|
+
■参考情報
|
72
|
+
|
73
|
+
[コンポーネントの配置位置を指定する](https://www.javadrive.jp/tutorial/borderlayout/index2.html)
|
74
|
+
|
75
|
+
|
76
|
+
|
47
77
|
---
|
48
78
|
|
49
79
|
|
50
80
|
|
51
|
-
あと`Swing`で画面レイアウトを作成する時は、`WindowBuilder`を使ってくださいな。
|
52
|
-
|
53
|
-
|
81
|
+
あと`Swing`で画面レイアウトを作成する時は、[WindowBuilder](https://teratail.com/questions/129500)を使ってくださいな。
|