Layout JavaFX–;从布局中动态排除/包括父级及其所有子级

Layout JavaFX–;从布局中动态排除/包括父级及其所有子级,layout,parent,javafx,Layout,Parent,Javafx,背景/背景: hBox.setManaged(false); 我有一个HBox作为父节点和许多子节点(按钮、文本字段、标签…)。HBox是其他容器(BorderPane/VBox/Grid)的子容器 我的问题: hBox.setManaged(false); 如何从布局中动态删除/排除父级(HBox)及其所有子级 我正在查找节点上的一些三状态属性(如Microsoft WPF): 可见–可见并参与布局 折叠–不可见且不参与布局(也适用于其子级) 隐藏–不可见,但参与布局 J

背景/背景:

hBox.setManaged(false);    
我有一个HBox作为父节点和许多子节点(按钮、文本字段、标签…)。HBox是其他容器(BorderPane/VBox/Grid)的子容器

我的问题:

hBox.setManaged(false);    
如何从布局中动态删除/排除父级(HBox)及其所有子级

我正在查找节点上的一些三状态属性(如Microsoft WPF):

可见–可见并参与布局

折叠–不可见且不参与布局(也适用于其子级)

隐藏–不可见,但参与布局

JavaFX提供了哪些选项

我目前的解决方案:

hBox.setManaged(false);    
  • 这项工作只针对HBox,其子公司仍然存在
root.getChildren().remove(hBoxTop)

root.getChildren().add(hBoxTop)

  • 好吧,这看起来可以工作..,但例如,在根为BorderPane的情况下,一旦我删除/添加并删除HBox,它之后的空间将保持未使用状态。我已经尝试了requestLayout(),但id不会强制thr-rrot填充它。我错过什么了吗?这是解决这个问题的正确方法吗
编辑:

hBox.setManaged(false);    
好吧,我让它工作了

可通过以下方式实现此特定情况下的动态删除和添加:

删除:

加:

当我在删除时没有调用setTop(null)时,BorderPane仍然为HBox保留空间(即使在从其子项删除之后)

IMHO:它不是很好的模型,因为它是特定于父容器的。例如,如果我将BorderPane更改为VBox a,我也必须更改这些方法。对于VBox,remove/add-on children集合可以工作,但我需要记住索引,以便HBox在调用add后显示在相同的位置。

使用
root.setTop(null)
不是一个好主意,因为正如您所说,它是特定于BorderPane的

我认为最好的解决方案是使用:

root.getChildren().remove(yourPane);
并使用布局方法来放置其他孩子。 但是,也许您不应该在应用程序中使用您想要的行为的边界窗格

请注意,您也可以执行
root.getChildren().clear()
删除所有组件并将其再次添加到布局中,但方式不同