2016-09-15 81 views
2

我用下面的代码:setManaged =虚假不工作

<VBox fx:id="v" xmlns:fx="http://javafx.com/fxml" managed="false" prefWidth="100" prefHeight="100"> 
    <Label text="label"/> 
</VBox> 

和截图: enter image description here

文本“标签”仍然存在,如何让垂直框消失,并删除其空间,如果我使用Parent#remove,我无法恢复它

+1

AFAIK,管理= false意味着父不以本节点在安排时考虑在内。如果你想隐藏标签,你可能应该将标签的visible属性设置为false,并将其设置为managed属性(而不是VBox的managed属性)。 – Itai

回答

1

managed属性仅确定Parent是否使用它自己的布局算法来确定子级的位置。它不会改变可视性。要删除包含占用空间的儿童,您还需要将visible属性设置为false

以下示例演示了这一点。当点击场景中的某个地方时,它将场景中的绿色矩形添加到场景中或从场景中删除。

@Override 
public void start(Stage primaryStage) { 
    Rectangle rect = new Rectangle(100, 100, Color.LIME); 

    VBox root = new VBox(new Rectangle(100, 100, Color.RED), 
         rect, 
         new Rectangle(100, 100, Color.BLUE)); 

    Scene scene = new Scene(root, 200, 300); 
    scene.setOnMouseClicked(evt -> { 
     rect.setManaged(!rect.isManaged()); 
     rect.setVisible(!rect.isVisible()); 
    }); 

    primaryStage.setScene(scene); 
    primaryStage.show(); 
} 

注意,类似的效果也可以通过添加/移除的节点来实现/形成它的父:

scene.setOnMouseClicked(evt -> { 
    if (rect.getParent() == null) { 
     root.getChildren().add(1, rect); 
    } else { 
     root.getChildren().remove(rect); 
    } 
});