【问题标题】:Get a StackPane's width获取 StackPane 的宽度
【发布时间】:2012-04-11 14:09:34
【问题描述】:

我不知道如何获得 StackPane 的宽度:

如果我提到http://docs.oracle.com/javafx/2.0/api/javafx/scene/layout/StackPane.html,StackPane 的尺寸应该适应它的内容:

堆栈窗格的父级将在堆栈窗格的可调整大小范围内调整堆栈窗格的大小 布局。默认情况下,堆栈窗格根据其内容计算此范围,如 下表。

preferredWidth 左/右插图加上最大的孩子首选项宽度。

这里的语法是 scala,但问题涉及 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 的内容宽度?

感谢

【问题讨论】:

    标签: javafx javafx-2


    【解决方案1】:

    布局管理器(实际上是所有可调整大小的对象)在实际显示应用程序之前不会更新其边界。矩形的宽度为 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());
    

    【讨论】:

      猜你喜欢
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2013-07-19
      • 2012-06-16
      • 2012-10-10
      相关资源
      最近更新 更多