1

別のペインに追加されたペインにラベルを追加すると、レイアウトの問題が発生します。

この例のように:

public class MyClass extends Pane {

  private final Pane myPane;

  public MyClass() {

    this.myPane.prefWidthProperty().bind(this.widthProperty);
    this.myPane.prefHeightProperty().bind(this.heightProperty);

    this.getChildren().add(this.myPane);
  }

  @Override
  layoutChildren() {

    this.foo();
  }

  private void foo() {

    this.myPane.getChildren().add(new Label("foo"));
  }

}

問題は、layoutChildren を無限に呼び出し続けることです。奇妙なことの 1 つは、ラベルの代わりにテキストを追加すると、「問題」が発生しないことです。

すべてのノード サイズを確認しましたが、変更されません。誰かが拡大していて、そのためにレイアウトが呼び出されているように見えますが、どこにあるのかわかりません。

私が見逃している些細なことはありますか?

4

2 に答える 2

0

オーバーライドされたレイアウト メソッドが foo を呼び出すと、新しい Label が追加されます。私が間違っていない限り、これにより別のレイアウト パスが開始され、新しいラベルが追加され、無限サイクルが発生します。

于 2014-09-25T03:41:51.090 に答える