回答編集履歴
3
サンプルコードの誤りを訂正
test
CHANGED
@@ -72,6 +72,12 @@
|
|
72
72
|
|
73
73
|
symptomButtons = new RadioButton[] { btn1, btn2, ... };
|
74
74
|
|
75
|
+
BooleanProperty[] selectedProperties = Arrays.stream(symptomButtons)
|
76
|
+
|
77
|
+
.map(b -> b.selectedProperty())
|
78
|
+
|
79
|
+
.toArray(size -> new BooleanProperty[size]);
|
80
|
+
|
75
81
|
// 各症状のいずれかのボタンの選択状態が変化したときに病名を再計算してlabelへ反映させる
|
76
82
|
|
77
83
|
label.textProperty().bind(
|
@@ -80,11 +86,7 @@
|
|
80
86
|
|
81
87
|
() -> diagnose(makeSelectedSymptomSet()),
|
82
88
|
|
83
|
-
Arrays.stream(symptomButtons)
|
84
|
-
|
85
|
-
|
89
|
+
selectedProperties));
|
86
|
-
|
87
|
-
.toArray(size -> new RadioButton[size])));
|
88
90
|
|
89
91
|
...
|
90
92
|
|
@@ -131,3 +133,9 @@
|
|
131
133
|
|
132
134
|
|
133
135
|
上のコード例ではbindの部分がややこしくよくわからないと感じると思います。詳しくは仕様を学んでいただきたいのですが、大雑把に言えば「症状を表す各ボタンのselectedプロパティーのいずれかが変化した際にdiagnoseメソッドを呼び出して病名を計算させ、その結果を自動的にlabelのtextプロパティーの値に反映するようよきに計らえ」といった感じです。ちなみにdiagnoseメソッドが引数として必要とする「選択状態の症状名の集合(Set)」はmakeSelectedSymptomSetで生成していますので「画面の状態からどのようにして症状の集合に変換するか」について参考にしてみてください。
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
---
|
140
|
+
|
141
|
+
追記:すみません、サンプルに上げたbind呼び出しのコードで引数に間違いがあったのでコードを訂正しました。
|
2
誤記訂正
test
CHANGED
@@ -130,4 +130,4 @@
|
|
130
130
|
|
131
131
|
|
132
132
|
|
133
|
-
上のコード例ではbindの部分がややこしくよくわからないと感じると思います。詳しくは仕様を学んでいただきたいのですが、大雑把に言えば「症状を表す各ボタンのselectedプロパティーのいずれかが変化した際にdiagnoseメソッドを呼び出して病名を計算させ、その結果を自動的にlabelのtextプロパティーの値に反映するようよきに計らえ」といった感じです。ちなみにdiagnoseメソッドが引数として必要とする「選択状態の症状名の集合」はmakeSelectedSymptomSetで生成していますので「画面の状態からどのようにして症状の
|
133
|
+
上のコード例ではbindの部分がややこしくよくわからないと感じると思います。詳しくは仕様を学んでいただきたいのですが、大雑把に言えば「症状を表す各ボタンのselectedプロパティーのいずれかが変化した際にdiagnoseメソッドを呼び出して病名を計算させ、その結果を自動的にlabelのtextプロパティーの値に反映するようよきに計らえ」といった感じです。ちなみにdiagnoseメソッドが引数として必要とする「選択状態の症状名の集合(Set)」はmakeSelectedSymptomSetで生成していますので「画面の状態からどのようにして症状の集合に変換するか」について参考にしてみてください。
|
1
誤記訂正
test
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
|
30
30
|
|
31
|
-
これでは画面の初期化時に一度だけそれぞれのif文が実行されるに過ぎず、画面表示後にユーザーがボタンを操作する度に再計算すべきという点が表現できていません。こうした計算は**イベントハンドリング**つまりイベント(ユーザ操作
|
31
|
+
これでは画面の初期化時に一度だけそれぞれのif文が実行されるに過ぎず、画面表示後にユーザーがボタンを操作する度に再計算すべきという点が表現できていません。こうした計算は**イベントハンドリング**つまりイベント契機(ユーザ操作等による何らかの変化を表す)で処理(ハンドラー)を起動すべきであることを登録しておくという考え方をします。ハンドラーを登録しておけばしかるべきタイミングで自動的にJavaFXのランタイムがハンドラーを起動してくれるので、ハンドラーの中に必要な計算処理などを記述することになります。
|
32
32
|
|
33
33
|
|
34
34
|
|