回答編集履歴

2

本文中にリンクとコメントを追加

2018/01/04 15:31

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -4,15 +4,11 @@
4
4
 
5
5
  他のクラスがJFrameを継承したクラスの内部実装(JLabel)について詳しいのはクラス間の結合度が高いのであまり好ましくないかと。
6
6
 
7
- あるクラスに対して内部の値を変更したい時は、イベントとして通知する方が良いです。
7
+ あるクラスに対して内部の値を変更したい時は、該当のクラスに対してイベントとして通知する形にして、通知側のクラスが値を変更するという形の方が個人的に好きです。
8
-
9
-
10
-
11
-
12
-
13
-
14
-
8
+
9
+
10
+
15
- 1,PropertyChangeListener を実装する。
11
+ 1,NewJFrameクラスは[PropertyChangeListener](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeListener.html) を実装する。
16
12
 
17
13
  ```Java
18
14
 
@@ -22,7 +18,7 @@
22
18
 
23
19
  ```
24
20
 
25
- 2,propertyChangeイベントイベント内で、jLabel1.setTextを行う。
21
+ 2,[propertyChange](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeListener.html#propertyChange-java.beans.PropertyChangeEvent-)イベントイベント内で、jLabel1.setTextの処理を行う。
26
22
 
27
23
  ```Java
28
24
 
@@ -46,13 +42,13 @@
46
42
 
47
43
  class OtherClass {
48
44
 
49
- private final NewJFrame frame;
45
+ private PropertyChangeListener listener; //listenerの参照は不要になったタイミングでnullを入れるほうがイベントハンドラのリークを防げます。
50
46
 
51
47
  private final Random rnd = new Random();
52
48
 
53
- OtherClass(NewJFrame frame){
49
+ OtherClass(PropertyChangeListener listener){
54
-
50
+
55
- this.frame = frame;
51
+ this.listener = listener;
56
52
 
57
53
  }
58
54
 
@@ -62,7 +58,7 @@
62
58
 
63
59
  PropertyChangeEvent event = new PropertyChangeEvent(this, "setText", text, text);
64
60
 
65
- this.frame.propertyChange(event);
61
+ this.listener.propertyChange(event);
66
62
 
67
63
  }
68
64
 
@@ -76,6 +72,8 @@
76
72
 
77
73
  ```Java
78
74
 
75
+
76
+
79
77
  import java.beans.PropertyChangeListener;
80
78
 
81
79
  import java.beans.PropertyChangeEvent;
@@ -312,13 +310,13 @@
312
310
 
313
311
  class OtherClass {
314
312
 
315
- private final NewJFrame frame;
313
+ private PropertyChangeListener listener; //listenerの参照は不要になったタイミングでnullを入れるほうがイベントハンドラのリークを防げます。
316
314
 
317
315
  private final Random rnd = new Random();
318
316
 
319
- OtherClass(NewJFrame frame){
317
+ OtherClass(PropertyChangeListener listener){
320
-
318
+
321
- this.frame = frame;
319
+ this.listener = listener;
322
320
 
323
321
  }
324
322
 
@@ -328,7 +326,7 @@
328
326
 
329
327
  PropertyChangeEvent event = new PropertyChangeEvent(this, "setText", text, text);
330
328
 
331
- this.frame.propertyChange(event);
329
+ this.listener.propertyChange(event);
332
330
 
333
331
  }
334
332
 

1

引用文を追加

2018/01/04 15:31

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -44,6 +44,18 @@
44
44
 
45
45
  import java.beans.PropertyChangeEvent;
46
46
 
47
+ class OtherClass {
48
+
49
+ private final NewJFrame frame;
50
+
51
+ private final Random rnd = new Random();
52
+
53
+ OtherClass(NewJFrame frame){
54
+
55
+ this.frame = frame;
56
+
57
+ }
58
+
47
59
  void setText() {
48
60
 
49
61
  String text = "Hello" + String.valueOf(rnd.nextInt(500));
@@ -54,6 +66,8 @@
54
66
 
55
67
  }
56
68
 
69
+ }
70
+
57
71
  ```
58
72
 
59
73
  以下はnetbeansで作ったサンプルソースコードです。ご参考まで
@@ -331,3 +345,11 @@
331
345
  }
332
346
 
333
347
  ```
348
+
349
+
350
+
351
+ □参考情報
352
+
353
+ [PropertyChangeListener](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeListener.html)
354
+
355
+ [PropertyChangeEvent](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeEvent.html)