回答編集履歴

3

サンプルコードの誤りを訂正

2017/09/28 00:46

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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
- .map(b -> b.selectedProperty())
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

誤記訂正

2017/09/28 00:46

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

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

誤記訂正

2017/09/27 23:50

投稿

KSwordOfHaste
KSwordOfHaste

スコア18394

test CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
 
30
30
 
31
- これでは画面の初期化時に一度だけそれぞれのif文が実行されるに過ぎず、画面表示後にユーザーがボタンを操作する度に再計算すべきという点が表現できていません。こうした計算は**イベントハンドリング**つまりイベント(ユーザ操作等によ何か変化した契機)で処理(ハンドラー)を起動すべきであることを登録しておくという考え方をします。ハンドラーを登録しておけばしかるべきタイミングで自動的にJavaFXのランタイムによりハンドラーを起動してくれるので、ハンドラーの中に必要な計算処理などを記述することになります。
31
+ これでは画面の初期化時に一度だけそれぞれのif文が実行されるに過ぎず、画面表示後にユーザーがボタンを操作する度に再計算すべきという点が表現できていません。こうした計算は**イベントハンドリング**つまりイベント契機(ユーザ操作等によ変化を表す)で処理(ハンドラー)を起動すべきであることを登録しておくという考え方をします。ハンドラーを登録しておけばしかるべきタイミングで自動的にJavaFXのランタイムハンドラーを起動してくれるので、ハンドラーの中に必要な計算処理などを記述することになります。
32
32
 
33
33
 
34
34