2012-04-11 54 views
3

我無法弄清楚如何獲得StackPane的寬度:得到一個StackPane的寬度

如果我指的是http://docs.oracle.com/javafx/2.0/api/javafx/scene/layout/StackPane.html,一個StackPane的尺寸應該適應它的內容:

一個stackpane的母公司將調整在 佈局期間堆疊面板的可調整範圍內的堆疊面板。默認情況下,堆棧窗格根據其內容計算此範圍,如下面的 表中所述。

preferredWidth左/右插入加上最大的孩子的pref寬度。這裏

語法是斯卡拉,但這個問題涉及的JavaFX:

import javafx.scene.layout.StackPane 
import javafx.scene.shape.Rectangle 

class Bubble() extends StackPane { 
val rect = new Rectangle(100, 100) 

getChildren.add(rect) 

println(rect.getWidth) 
println(this.getWidth) 
} 

Output : 
>> 100.0 
>> 0.0 <- Why isn't it 100 ? 

這是一個錯誤或等待行爲?我如何獲得StackPane的內容寬度?直到申請被實際顯示

感謝名單

回答

3

佈局管理器(實際上是所有可調整大小的對象)不更新自己的邊界。矩形的寬度爲100,因爲它是構造函數的默認值。

見下面的代碼:

@Override 
public void start(Stage stage) throws Exception { 
    StackPane root = new StackPane(); 
    Rectangle rect = new Rectangle(100, 100); 
    root.getChildren().add(rect); 

    // 100 - 0 
    System.out.println(rect.getWidth()); 
    System.out.println(root.getWidth()); 

    stage.setScene(new Scene(root)); 

    // 100 - 0 
    System.out.println(rect.getWidth()); 
    System.out.println(root.getWidth()); 

    stage.show(); 

    // 100 - 100 
    System.out.println(rect.getWidth()); 
    System.out.println(root.getWidth()); 
} 

所以你需要或者等待StackPane中顯示。或者更好地依靠JavaFX並使用綁定。例如。

stage.titleProperty().bind(root.widthProperty().asString()); 
相關問題