JavaFX-setVisible隐藏元素,但不重新排列相邻节点


83

在JavaFX中,如果我有一个包含2个VBox元素的场景,并且每个元素中VBox都有多个元素Label
如果将顶部设置VBox不可见,为什么底部VBox 不向上移动到顶部所在的场景VBox

元素VBox不可见的,但我希望其他对象能够移入其位置。

我正在使用FXML加载控件。


2
因为第一个VBox只是看不见的,而不是removed从其父级看不到的。
ItachiUchiha 2015年

1
隐藏节点是否占用任何空间通常是布局的决定
kleopatra 2015年

Answers:


165

Node.setVisible(boolean)只需切换的可见性状态Node

要从Node其父级布局计算中排除a ,您还必须通过调用设置其托管状态Node.setManaged(false)

如果要在可见性旁边自动更新托管状态,则可以使用@jewelsea指出的绑定: node.managedProperty().bind(node.visibleProperty());


49
一个还结合作品,例如node.managedProperty().bind(node.visibleProperty());
jewelsea

这很棒!来自Adobe / Apache Flex,我真的很想念includeInlayout开关(在这里做同样的事情)。Flex仍然具有更直观的名称,但是很高兴我们可以轻松做到这一点。
用户

1
从父母那里移除隐性元素的时间太长了,这将在将来节省大量时间。
hanslovsky

7

由于它是不可见的,因此不会移动到顶部。您必须使用类似的方法将其删除:

// remove
vbox.getChildren().remove(...)

一旦删除了您希望不可见的元素,另一个元素应移至顶部。


3
AFAIK,操作场景图比将visible设置为false更为昂贵。
Puce

2

而不是隐藏vbox,您应该其从子级中删除,如果要再次显示它,请再次添加vbox。



0

如果我想隐藏和取消隐藏一个节点,如果我想隐藏它,我将该节点的大小调整为0。这样,该节点将不会占据空间,因为用户不可见,因此当我希望它可见时,我再次调整大小使其可见。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.