回答編集履歴
2
本文中にリンクとコメントを追加
answer
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
他の回答者様によって解決内容が既に出ているので少し違ったアプローチの回答を致します。
|
2
2
|
|
3
3
|
他のクラスがJFrameを継承したクラスの内部実装(JLabel)について詳しいのはクラス間の結合度が高いのであまり好ましくないかと。
|
4
|
-
あるクラスに対して内部の値を変更したい時は、イベントとして通知する
|
4
|
+
あるクラスに対して内部の値を変更したい時は、該当のクラスに対してイベントとして通知する形にして、通知側のクラスが値を変更するという形の方が個人的に好きです。
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
1,PropertyChangeListener を実装する。
|
6
|
+
1,NewJFrameクラスは[PropertyChangeListener](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeListener.html) を実装する。
|
9
7
|
```Java
|
10
8
|
import java.beans.PropertyChangeListener;
|
11
9
|
public class NewJFrame extends javax.swing.JFrame implements PropertyChangeListener {
|
12
10
|
```
|
13
|
-
2,propertyChangeイベントイベント内で、jLabel1.setTextを行う。
|
11
|
+
2,[propertyChange](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeListener.html#propertyChange-java.beans.PropertyChangeEvent-)イベントイベント内で、jLabel1.setTextの処理を行う。
|
14
12
|
```Java
|
15
13
|
@Override
|
16
14
|
public void propertyChange(PropertyChangeEvent e) {
|
@@ -22,21 +20,22 @@
|
|
22
20
|
```Java
|
23
21
|
import java.beans.PropertyChangeEvent;
|
24
22
|
class OtherClass {
|
25
|
-
private
|
23
|
+
private PropertyChangeListener listener; //listenerの参照は不要になったタイミングでnullを入れるほうがイベントハンドラのリークを防げます。
|
26
24
|
private final Random rnd = new Random();
|
27
|
-
OtherClass(
|
25
|
+
OtherClass(PropertyChangeListener listener){
|
28
|
-
this.
|
26
|
+
this.listener = listener;
|
29
27
|
}
|
30
28
|
void setText() {
|
31
29
|
String text = "Hello" + String.valueOf(rnd.nextInt(500));
|
32
30
|
PropertyChangeEvent event = new PropertyChangeEvent(this, "setText", text, text);
|
33
|
-
this.
|
31
|
+
this.listener.propertyChange(event);
|
34
32
|
}
|
35
33
|
}
|
36
34
|
```
|
37
35
|
以下はnetbeansで作ったサンプルソースコードです。ご参考まで
|
38
36
|
|
39
37
|
```Java
|
38
|
+
|
40
39
|
import java.beans.PropertyChangeListener;
|
41
40
|
import java.beans.PropertyChangeEvent;
|
42
41
|
import java.util.Random;
|
@@ -155,15 +154,15 @@
|
|
155
154
|
}
|
156
155
|
|
157
156
|
class OtherClass {
|
158
|
-
private
|
157
|
+
private PropertyChangeListener listener; //listenerの参照は不要になったタイミングでnullを入れるほうがイベントハンドラのリークを防げます。
|
159
158
|
private final Random rnd = new Random();
|
160
|
-
OtherClass(
|
159
|
+
OtherClass(PropertyChangeListener listener){
|
161
|
-
this.
|
160
|
+
this.listener = listener;
|
162
161
|
}
|
163
162
|
void setText() {
|
164
163
|
String text = "Hello" + String.valueOf(rnd.nextInt(500));
|
165
164
|
PropertyChangeEvent event = new PropertyChangeEvent(this, "setText", text, text);
|
166
|
-
this.
|
165
|
+
this.listener.propertyChange(event);
|
167
166
|
}
|
168
167
|
}
|
169
168
|
// Variables declaration - do not modify
|
1
引用文を追加
answer
CHANGED
@@ -21,11 +21,18 @@
|
|
21
21
|
3,他クラス側でNewJFrameに対してpropertyChangeイベントを発火する。
|
22
22
|
```Java
|
23
23
|
import java.beans.PropertyChangeEvent;
|
24
|
+
class OtherClass {
|
25
|
+
private final NewJFrame frame;
|
26
|
+
private final Random rnd = new Random();
|
27
|
+
OtherClass(NewJFrame frame){
|
28
|
+
this.frame = frame;
|
29
|
+
}
|
24
30
|
void setText() {
|
25
31
|
String text = "Hello" + String.valueOf(rnd.nextInt(500));
|
26
32
|
PropertyChangeEvent event = new PropertyChangeEvent(this, "setText", text, text);
|
27
33
|
this.frame.propertyChange(event);
|
28
34
|
}
|
35
|
+
}
|
29
36
|
```
|
30
37
|
以下はnetbeansで作ったサンプルソースコードです。ご参考まで
|
31
38
|
|
@@ -164,4 +171,8 @@
|
|
164
171
|
private javax.swing.JLabel jLabel1;
|
165
172
|
// End of variables declaration
|
166
173
|
}
|
167
|
-
```
|
174
|
+
```
|
175
|
+
|
176
|
+
□参考情報
|
177
|
+
[PropertyChangeListener](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeListener.html)
|
178
|
+
[PropertyChangeEvent](https://docs.oracle.com/javase/jp/8/docs/api/java/beans/PropertyChangeEvent.html)
|