回答編集履歴
2
本文中にリンクとコメントを追加
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
|
45
|
+
private PropertyChangeListener listener; //listenerの参照は不要になったタイミングでnullを入れるほうがイベントハンドラのリークを防げます。
|
50
46
|
|
51
47
|
private final Random rnd = new Random();
|
52
48
|
|
53
|
-
OtherClass(
|
49
|
+
OtherClass(PropertyChangeListener listener){
|
54
|
-
|
50
|
+
|
55
|
-
this.
|
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.
|
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
|
313
|
+
private PropertyChangeListener listener; //listenerの参照は不要になったタイミングでnullを入れるほうがイベントハンドラのリークを防げます。
|
316
314
|
|
317
315
|
private final Random rnd = new Random();
|
318
316
|
|
319
|
-
OtherClass(
|
317
|
+
OtherClass(PropertyChangeListener listener){
|
320
|
-
|
318
|
+
|
321
|
-
this.
|
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.
|
329
|
+
this.listener.propertyChange(event);
|
332
330
|
|
333
331
|
}
|
334
332
|
|
1
引用文を追加
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)
|