gpt4 book ai didi

layout - JavaFX – 从布局中动态排除/包含父项及其所有子项

转载 作者:行者123 更新时间:2023-12-02 03:55:13 24 4
gpt4 key购买 nike

背景/语境:

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

我的问题:

如何从布局中动态删除/排除父项 (HBox) 及其所有子项?

我正在寻找 Node 上的一些三态属性(比如在 Microsoft WPF 中):

Visible – 可见并参与布局

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

隐藏 – 不可见但参与布局

http://msdn.microsoft.com/en-us/library/ms590101.aspx

JavaFX 提供哪些选项?

我目前的解决方案:

hBox.setManaged(false);    
  • 这项工作只适用于 HBox,它的 child 仍然存在

root.getChildren().remove(hBoxTop);

root.getChildren().add(hBoxTop);

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

已编辑:

好吧,我成功了。

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

移除:

root.setTop(null);

添加:

root.setTop(hBoxTop);

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

恕我直言:它不是很好的模型,因为它是特定于父容器的。例如,如果我将 BorderPane 更改为 VBox,我也必须更改这些方法。对于 VBox,删除/添加子集合是可行的,但我需要记住索引,以便 HBox 在调用添加后出现在同一位置。

最佳答案

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

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

root.getChildren().remove(yourPane);

并使用布局方法根据需要放置其他 child 。但也许您一开始就不应该在应用程序中使用 BorderPane 来实现您想要的行为。

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

关于layout - JavaFX – 从布局中动态排除/包含父项及其所有子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12958898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com