AnchorPane getwidth问题中的JavaFX画布

AnchorPane getwidth问题中的JavaFX画布,java,javafx,Java,Javafx,我正在用JavaFX创建一个带有自定义画布类的应用程序。 自定义画布类没有什么特殊之处,它不包含任何代码。 但是,当我在其resize函数中放置断点时,我注意到在调整窗口大小时,getWidth()实际上没有更新 奇怪的是,如果我用不同的组件(比如按钮)替换画布,那么我就没有问题了。宽度已正确更新 public class MyApp extends Application { @Override public void start(Stage primaryStage) throws

我正在用JavaFX创建一个带有自定义画布类的应用程序。 自定义画布类没有什么特殊之处,它不包含任何代码。 但是,当我在其resize函数中放置断点时,我注意到在调整窗口大小时,
getWidth()
实际上没有更新

奇怪的是,如果我用不同的组件(比如按钮)替换画布,那么我就没有问题了。宽度已正确更新

public class MyApp extends Application
{

  @Override
  public void start(Stage primaryStage) throws Exception
  {
    primaryStage.setTitle("Test");

    CustomCanvas canvas = new CustomCanvas();

    AnchorPane.setTopAnchor(canvas, 0d);
    AnchorPane.setLeftAnchor(canvas, 0d);
    AnchorPane.setBottomAnchor(canvas, 0d);
    AnchorPane.setRightAnchor(canvas, 0d);

    AnchorPane root = new AnchorPane();
    root.getChildren().add(canvas);
    root.setPrefWidth(500);
    root.setPrefHeight(500);

    primaryStage.setScene(new Scene(root,500,500));
    primaryStage.show();
  }

  public static void main(String[] args)
  {
    launch(args);
  }
}
更多的测试表明,从
区域继承的所有组件基本上都可以调整大小。
region.isResizeable()
方法返回
true
。另一方面,画布在调用此方法时返回
false

当然,我可以通过绑定属性来使用变通方法。很好

CustomCanvas canvas = new CustomCanvas();
canvas.widthProperty().bind(primaryStage.widthProperty());
canvas.heightProperty().bind(primaryStage.heightProperty());

但这让我更想知道,为什么主播不能做这项工作。这是故意的还是JavaFX错误?

覆盖Canvas.isResizable()以返回true


然后重写Canvas.resize()以调用Canvas.setWidth()和Canvas.setHeight()

这在JavaFX8中仍然是一个问题。