4

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のコンテンツ幅を取得するにはどうすればよいですか?

ありがとう

4

1 に答える 1

3

レイアウトマネージャー(および実際にはすべてのサイズ変更可能なオブジェクト)は、アプリケーションが実際に表示されるまで境界を更新しません。Rectangleは、コンストラクターのデフォルト値であるため、幅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());
于 2012-04-11T14:44:39.650 に答える