teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

removeは冗長なので削除

2018/04/02 02:56

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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

不正確な記述を訂正

2018/04/02 02:56

投稿

KSwordOfHaste
KSwordOfHaste

スコア18404

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(A)の特徴をもってますが、(B)(C)は自前で行う必要があります。
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
  }