setManaged = false不起作用

时间:2016-09-15 13:56:24

标签: java javafx

我使用以下代码:

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

截图是: enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

以下示例演示了这一点。它&#34;添加/删除&#34;点击场景中某处的绿色矩形到场景。

@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);
    }
});