3

背景/コンテキスト:

親として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が同じ場所に表示されるように、インデックスを覚えておく必要があります。

4

1 に答える 1