2015-10-07 213 views
0

我在基於JavaFX的遊戲中創建彈出式確認消息,並試圖弄清楚佈局是如何工作的。我的彈出類擴展StackPane它的構造看起來像這樣:JavaFX VBox調整大小

public PopUp (String str) 
{ 
    super(); 
    Color dark = Color.rgb(0, 0, 0, 0.35); 
    setMaxSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    setPrefSize(Double.MAX_VALUE, Double.MAX_VALUE); 
    FXUtil.backgroundColor(dark, this); 

    Text displayText = new Text(str); 
    displayText.setFont(FontFactory.general(18.0)); 
    displayText.setFill(Color.WHITE); 
    displayText.setWrappingWidth(560.0); 

    buttonBox = new HBox(20.0); 
    buttonBox.setAlignment(Pos.CENTER); 
    FXUtil.backgroundColor(Color.GREY, buttonBox); 

    VBox arrangement = new VBox(20.0, displayText, buttonBox); 
    arrangement.setAlignment(Pos.CENTER); 
    arrangement.setMaxWidth(600.0); 
    FXUtil.backgroundColor(Color.RED, arrangement); 

    getChildren().add(arrangement); 
} 

(該FXUtil類是用於設置背景顏色的方便,FontFactory是這聽起來像)

幾個按鈕的加入得到之後,但我很驚訝地發現VBox安排使用了完整的垂直空間,即使它的首選高度是其子項的總高度(加上插入等,按照文檔)。基本上,這是一個高大的紅色橫杆,跨越窗口的高度。

有沒有辦法讓它使用它的首選高度而不是最大高度?我希望它的高度足以適合其孩子。

+2

您可以將其最大高度屬性綁定到其前置高度之一。 –

+0

好主意,但它沒有改變任何東西。我添加了:arrangement.maxHeightProperty()。bind(arrangement.prefHeightProperty());但它仍然是一個高大的紅色酒吧。 –

+0

以前的評論不正確。 –

回答

0

將max height屬性綁定到計算的height屬性。如:

arrangement.maxHeightProperty().bind(arrangement.heightProperty()); 
+0

非常感謝。這就是答案。乾杯。 –