回答編集履歴

7

修正

2023/03/08 17:57

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -53,7 +53,7 @@
53
53
  revalidate();
54
54
  }
55
55
  void reverseFlag() {
56
- flag = flag == 0 ? 1 : 0;
56
+ flag ^= 1;
57
57
  setFields();
58
58
  }
59
59
  }

6

誤字?

2023/03/08 17:17

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -3,7 +3,7 @@
3
3
  つまりボタンを一回押した時、 JFrame には最初のボタンと二つ目のボタンがともに SOUTH で保存されていることになります。
4
4
  同一方向のコンポーネントが複数あった場合に BorderLayout がどれを配置するかは、ドキュメント上では明言されていなかったと思います。
5
5
 
6
- 試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままで、従って e.getSource() == this.b が成立せず、2回目のボタンの処理は行われませんでした。
6
+ 試した所では、二回目のボタン押下でも actionPerformed に渡される イベントのソース (getSource() で返されるオブジェクト) は最初のボタンのままで、従って e.getSource() == this.b が成立せず、回目のボタンの処理は行われませんでした。
7
7
 
8
8
  ボタンを押す度に JFrame から全部設定し直すような乱暴なことをしなくても、 「ボタンを押すごとに画面内のTextFieldの内容と個数が切り替わる」なら表示状態の設定(setVisible)や再配置要求(revalidate)等で出来ると思います。
9
9
  ```java

5

説明修正

2023/03/08 17:15

投稿

jimbe
jimbe

スコア13168

test CHANGED
@@ -1,11 +1,11 @@
1
- BorderLayout は一つの方向には一つしか表示出来ません。
1
+ BorderLayout は一つの方向には一つしか表示出来ません。また、レイアウトは保存されているコンポーネントを並べるだけで、保存の管理には関係しません。
2
- 一方 JFrame の add メソッドはコンポーネントと制約を追加するメソッドで、制約が同じだからとコンポーネントを置き換えたりはせずそのまま追加します。
2
+ 一方 JFrame の add メソッドはコンポーネントを追加するメソッドで、第2引数が同じだからとコンポーネントを置き換えたりはせずそのまま追加します。
3
- つまりボタンを一回押した時、最初のボタンと二つ目のボタンがともに制約 =SOUTH で存在することになります。
3
+ つまりボタンを一回押した時、 JFrame には最初のボタンと二つ目のボタンがともに SOUTH でされていることになります。
4
- 同一方向(制約)に複数のコンポーネントが設定されていた場合に BorderLayout がど配置するかは、ドキュメント上では明言されていなかったと思います。
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

説明修正

2023/03/07 11:46

投稿

jimbe
jimbe

スコア13168

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

原因の説明を追加

2023/03/07 11:41

投稿

jimbe
jimbe

スコア13168

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() 抜け

2023/03/07 11:25

投稿

jimbe
jimbe

スコア13168

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

変数名変更

2023/03/07 11:18

投稿

jimbe
jimbe

スコア13168

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