在JavaFX中,如果我有一个包含2个VBox
元素的场景,并且每个VBox
中都有多个Label
。
如果我将顶部VBox
设置为不可见,为什么底部VBox
不会向上移动顶部VBox
所在的场景?
VBox
不可见,但我希望其他对象移动到位。
我正在使用FXML来加载我的控件。
答案 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());