背景/コンテキスト:
親としてHBoxがあり、多くの子ノード(Buttons、TextFields、Labels…)があります。HBoxは他のコンテナ(BorderPane / VBox / Grid)の子です
私の質問:
親(HBox)とそのすべての子をレイアウトから動的に削除/除外するにはどうすればよいですか?
私はノードでいくつかのスリーステートプロパティを探しています(Microsoft WPFのように):
表示–表示され、レイアウトに参加します
折りたたみ–表示されず、レイアウトに参加しません(その子にも適用されます)
非表示–表示されませんが、レイアウトに参加します
http://msdn.microsoft.com/en-us/library/ms590101.aspx
JavaFXにはどのようなオプションがありますか?
これまでの私の解決策:
hBox.setManaged(false);
- これはHBoxでのみ機能し、その子はまだ存在しています
root.getChildren()。remove(hBoxTop);
root.getChildren()。add(hBoxTop);
- まあ、これはうまくいくように見えますが、たとえば、ルートがBorderPaneの場合、HBoxを削除/追加して削除すると、その後のスペースは未使用のままになります。私はすでにrequestLayout()を試しましたが、idはthrrrotにそれを埋めるように強制しません。私は何かが足りないのですか?この問題への正しいアプローチですか?
編集:
さて、私はこれを機能させました。
この特定のケースの動的な削除と追加は、次の方法で実現できます。
削除する:
root.setTop(null);
追加:
root.setTop(hBoxTop);
削除時にsetTop(null)を呼び出さなかった場合でも、BorderPaneは(子から削除した後でも)HBox用のスペースを予約していました。
IMHO:親コンテナ固有であるため、あまり良いモデルではありません。たとえば、BorderPaneをVBoxに変更した場合、これらのメソッドも変更する必要がありました。VBoxの場合、子コレクションの削除/追加は機能しますが、addを呼び出した後にHBoxが同じ場所に表示されるように、インデックスを覚えておく必要があります。