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