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