2016-09-15 133 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); 
    } 
});