回答編集履歴
2
removeは冗長なので削除
answer
CHANGED
@@ -31,7 +31,7 @@
|
|
31
31
|
|
32
32
|
// swingのContainer#add風のメソッド
|
33
33
|
public void add(Node child, SW constraint) {
|
34
|
-
getChildren().remove(child);
|
34
|
+
//getChildren().remove(child);//冗長でした。
|
35
35
|
getChildren().add(child);
|
36
36
|
// constraintプロパティーの値が引数に指定したものと等しい場合のみvisibleにする
|
37
37
|
child.visibleProperty().bind(constraintsProperty().isEqualTo(constraint));
|
1
不正確な記述を訂正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
StackPane, Group
|
1
|
+
StackPane, Groupなどいくつか方法がありますね。どちらを用いても大差ないですが、以下切り替え方法について少しコメントします。
|
2
2
|
|
3
3
|
CardLayoutの主な特徴は以下だと思います。
|
4
4
|
|
@@ -6,13 +6,13 @@
|
|
6
6
|
(B) 一時に表示するのは一つの子供だけ
|
7
7
|
(C) 子供の切り替えはconstraintsを指定するだけで簡単に切り替わる
|
8
8
|
|
9
|
-
StackPane
|
9
|
+
StackPane/Groupともに(A)の特徴をもってますが、(B)(C)は自前で行う必要があります。
|
10
10
|
|
11
11
|
> StackPaneは子リストの順序によって順番が決まると聞いたのですが、それをうまく使えば行けそう…と思ったところでリストの操作がうまくできません。
|
12
12
|
|
13
|
-
さてStackPaneの(A)の目的はどちらかといえば複数の子供を深度(子供を配置した順番)に応じて同時に表示するためという意味合いですので、深度を切り替えるだけでは(B)が確実に行えません。透明な背景を持つような子供があると奥にある別の子供が見えちゃいます。
|
13
|
+
さてStackPane/Groupの(A)の目的はどちらかといえば複数の子供を深度(子供を配置した順番)に応じて同時に表示するためという意味合いですので、深度を切り替えるだけでは(B)が確実に行えません。透明な背景を持つような子供があると奥にある別の子供が見えちゃいます。
|
14
14
|
|
15
|
-
そこで(B)(C)は「表示対象の子供以外をinvisibleにするという方針がよいと思います。若干めんどくさく感じるかも知れませんが、JavaFXのプロパティーとbindを用いるとそう面倒でもありません。
|
15
|
+
そこで(B)(C)は「表示対象の子供以外をinvisibleにするという方針がよいと思います。若干めんどくさく感じるかも知れませんが、JavaFXのプロパティーとbindを用いるとそう面倒でもありません。CardLayoutでいうconstraintsをJavaFXプロパティーとして定義し、その値に応じて自動的に各々の子供のvisibleプロパティーを変化するようにbindしてやればよいです。
|
16
16
|
|
17
17
|
以下はその簡単な例です。
|
18
18
|
|
@@ -33,6 +33,7 @@
|
|
33
33
|
public void add(Node child, SW constraint) {
|
34
34
|
getChildren().remove(child);
|
35
35
|
getChildren().add(child);
|
36
|
+
// constraintプロパティーの値が引数に指定したものと等しい場合のみvisibleにする
|
36
37
|
child.visibleProperty().bind(constraintsProperty().isEqualTo(constraint));
|
37
38
|
}
|
38
39
|
}
|