背景/上下文:
我有一个 HBox 作为父节点和许多子节点(按钮、文本字段、标签……)。HBox 是其他容器的子容器 (BorderPane/VBox/Grid)
我的问题:
如何从布局中动态删除/排除父级(HBox)及其所有子级?
我正在寻找 Node 上的一些三态属性(例如在 Microsoft WPF 中):
Visible – 可见并参与布局
Collapsed – 不可见且不参与布局(也适用于其子级)
隐藏- 不可见但参与布局
http://msdn.microsoft.com/en-us/library/ms590101.aspx
JavaFX 提供哪些选项?
到目前为止我的解决方案:
hBox.setManaged(false);
- 这项工作仅适用于 HBox,它的孩子仍然存在
root.getChildren().remove(hBoxTop);
root.getChildren().add(hBoxTop);
- 好吧,这看起来可以工作..,但例如在 root 是 BorderPane 的情况下,一旦我删除/添加和删除 HBox,它后面的空间仍然未使用。我已经尝试过 requestLayout() 但 id 不会强制 thr rrot 填充它。我错过了什么吗?这是解决这个问题的正确方法吗?
编辑:
好吧,我得到了这个工作。
可以通过以下方式动态删除和添加此特定情况:
消除:
root.setTop(null);
添加:
root.setTop(hBoxTop);
当我在移除时没有调用 setTop(null) 时,BorderPane 仍然为 HBox 保留空间(即使在从其子项中移除之后)。
恕我直言:它不是很好的模型,因为它是特定于父容器的。例如,如果我将 BorderPane 更改为 VBox a,我也必须更改这些方法。对于 VBox,在子集合上删除/添加有效,但我需要记住索引,以便在调用 add 后 HBox 出现在同一位置。