回答編集履歴
7
修正
test
CHANGED
@@ -53,7 +53,7 @@
|
|
53
53
|
revalidate();
|
54
54
|
}
|
55
55
|
void reverseFlag() {
|
56
|
-
flag =
|
56
|
+
flag ^= 1;
|
57
57
|
setFields();
|
58
58
|
}
|
59
59
|
}
|
6
誤字?
test
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
つまりボタンを一回押した時、 JFrame には最初のボタンと二つ目のボタンがともに SOUTH で保存されていることになります。
|
4
4
|
同一方向のコンポーネントが複数あった場合に BorderLayout がどれを配置するかは、ドキュメント上では明言されていなかったと思います。
|
5
5
|
|
6
|
-
試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままで、従って e.getSource() == this.b が成立せず、
|
6
|
+
試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままで、従って e.getSource() == this.b が成立せず、二回目のボタンの処理は行われませんでした。
|
7
7
|
|
8
8
|
ボタンを押す度に JFrame から全部設定し直すような乱暴なことをしなくても、 「ボタンを押すごとに画面内のTextFieldの内容と個数が切り替わる」なら表示状態の設定(setVisible)や再配置要求(revalidate)等で出来ると思います。
|
9
9
|
```java
|
5
説明修正
test
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
BorderLayout は一つの方向には一つしか表示出来ません。
|
1
|
+
BorderLayout は一つの方向には一つしか表示出来ません。また、レイアウトは保存されているコンポーネントを並べるだけで、保存の管理には関係しません。
|
2
|
-
一方 JFrame の add メソッドはコンポーネント
|
2
|
+
一方 JFrame の add メソッドはコンポーネントを追加するメソッドで、第2引数が同じだからとコンポーネントを置き換えたりはせずそのまま追加します。
|
3
|
-
つまり
|
3
|
+
つまりボタンを一回押した時、 JFrame には最初のボタンと二つ目のボタンがともに SOUTH で保存されていることになります。
|
4
|
-
同一
|
4
|
+
同一方向のコンポーネントが複数あった場合に BorderLayout がどれを配置するかは、ドキュメント上では明言されていなかったと思います。
|
5
|
-
試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままでした。
|
6
|
-
従って e.getSource() == this.b が成立せず、ボタンの処理は行われません。
|
7
5
|
|
6
|
+
試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままで、従って e.getSource() == this.b が成立せず、2回目のボタンの処理は行われませんでした。
|
7
|
+
|
8
|
-
ボタンを押す度に JFrame から全部設定し直すような乱暴なことをしなくても、 「ボタンを押すごとに画面内のTextFieldの内容と個数が切り替わる」なら表示状態の設定や再配置要求等で出来ると思います。
|
8
|
+
ボタンを押す度に JFrame から全部設定し直すような乱暴なことをしなくても、 「ボタンを押すごとに画面内のTextFieldの内容と個数が切り替わる」なら表示状態の設定(setVisible)や再配置要求(revalidate)等で出来ると思います。
|
9
9
|
```java
|
10
10
|
import java.awt.BorderLayout;
|
11
11
|
import java.util.ArrayList;
|
4
説明修正
test
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
BorderLayout は一つの方向には一つしか表示出来ません。
|
2
|
-
JFrame の add メソッドはコンポーネントと制約を追加するメソッドで、
|
2
|
+
一方 JFrame の add メソッドはコンポーネントと制約を追加するメソッドで、制約が同じだからとコンポーネントを置き換えたりはせずそのまま追加します。
|
3
|
+
つまり、ボタンを一回押した時、最初のボタンと二つ目のボタンがともに制約 =SOUTH で存在することになります。
|
3
4
|
同一の方向(制約)に複数のコンポーネントが設定されていた場合に BorderLayout がどう配置するかは、ドキュメント上では明言されていなかったと思います。
|
4
5
|
試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままでした。
|
5
6
|
従って e.getSource() == this.b が成立せず、ボタンの処理は行われません。
|
3
原因の説明を追加
test
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
BorderLayout は一つの方向には一つしか表示出来ません。
|
2
|
+
JFrame の add メソッドはコンポーネントと制約を追加するメソッドで、追加されたコンポーネントの配置をレイアウトに任せます。
|
3
|
+
同一の方向(制約)に複数のコンポーネントが設定されていた場合に BorderLayout がどう配置するかは、ドキュメント上では明言されていなかったと思います。
|
4
|
+
試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままでした。
|
5
|
+
従って e.getSource() == this.b が成立せず、ボタンの処理は行われません。
|
6
|
+
|
1
7
|
ボタンを押す度に JFrame から全部設定し直すような乱暴なことをしなくても、 「ボタンを押すごとに画面内のTextFieldの内容と個数が切り替わる」なら表示状態の設定や再配置要求等で出来ると思います。
|
2
8
|
```java
|
3
9
|
import java.awt.BorderLayout;
|
2
super() 抜け
test
CHANGED
@@ -29,6 +29,7 @@
|
|
29
29
|
private List<JTextField> list = new ArrayList<JTextField>();
|
30
30
|
private int flag = 0;
|
31
31
|
TestPanel() {
|
32
|
+
super();
|
32
33
|
for(int i=0; i<10; i++) {
|
33
34
|
JTextField textField = new JTextField();
|
34
35
|
add(textField);
|
1
変数名変更
test
CHANGED
@@ -17,11 +17,11 @@
|
|
17
17
|
setSize(1000, 100);
|
18
18
|
setResizable(false);
|
19
19
|
|
20
|
-
TestPanel p = new TestPanel();
|
20
|
+
TestPanel panel = new TestPanel();
|
21
|
-
add(p, BorderLayout.CENTER);
|
21
|
+
add(panel, BorderLayout.CENTER);
|
22
22
|
|
23
23
|
JButton button = new JButton("button");
|
24
|
-
button.addActionListener(e -> p.reverseFlag());
|
24
|
+
button.addActionListener(e -> panel.reverseFlag());
|
25
25
|
add(button, BorderLayout.SOUTH);
|
26
26
|
}
|
27
27
|
|