背景/上下文:
我有一个HBox作为父节点和许多子节点(Buttons,TextFields,Labels ...)。 HBox是其他容器的子代(BorderPane / VBox / Grid)
我的问题:
如何从布局中动态删除/排除父(HBox)及其所有子项?
我在Node上寻找一些三态属性(比如在Microsoft WPF中):
可见 - 可见并参与布局
折叠 - 不可见且不参与布局(也适用于其子女)
隐藏 - 不可见但参与布局
http://msdn.microsoft.com/en-us/library/ms590101.aspx
JavaFX提供哪些选项?
到目前为止我的解决方案:
hBox.setManaged(false);
root.getChildren()除去(hBoxTop)。
root.getChildren()添加(hBoxTop);
编辑:
嗯,我有这个工作。
可以通过以下方式动态删除和添加此特定案例:
删除:
root.setTop(null);
添加:
root.setTop(hBoxTop);
当我在删除时没有调用setTop(null)时,BorderPane仍为HBox保留空间(即使从子节点中删除后)。
恕我直言:它不是很好的模型,因为它是父容器特定的。例如,如果我将BorderPane更改为VBox,我也必须更改这些方法。对于VBox,删除/添加子集合作品,但我需要记住索引,以便在调用add后HBox出现在同一个地方。
答案 0 :(得分:1)
使用root.setTop(null)
不是一个好主意,因为正如您所说,它是特定于BorderPane的。
我认为最好的解决方案是使用:
root.getChildren().remove(yourPane);
并使用布局方法将您的其他孩子放置在您想要的位置。 但也许你不应该首先在你的应用程序中使用你想要的行为使用BorderPane。
请注意,您也可以执行root.getChildren().clear()
删除所有组件并将其重新添加到您的布局中,但不同。