2012-04-11 55 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()); 
相关问题