JavaFX - setVisible不会“隐藏”该元素

时间:2015-02-17 09:05:11

标签: java javafx javafx-2 javafx-8 fxml

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

VBox 不可见,但我希望其他对象移动到位。

我正在使用FXML来加载我的控件。

5 个答案:

答案 0 :(得分:121)

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

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

如果您希望托管状态与可见性一起自动更新,您可以使用@jewelsea指出的绑定:node.managedProperty().bind(node.visibleProperty());

答案 1 :(得分:7)

由于它不可见,它不会移到顶部。你必须删除它:

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

一旦你删除了你想要隐藏的元素,那么另一个元素应该移到顶部。

答案 2 :(得分:2)

您应该从儿童中删除,而不是隐藏vbox,如果您想再次显示再次添加 vbox。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

尝试同时使用setVisible和managedProperty。这是一个示例:

myHBox.setVisible(false); myHBox.managedProperty().bind(myHBox.visibleProperty());