簡體   English   中英

AnchorPane中的JavaFX Canvas getwidth問題

[英]JavaFX Canvas in AnchorPane getwidth issue

我正在使用自定義Canvas類在JavaFX中創建一個Application。 自定義Canvas類沒有什么特別之處,它不包含任何代碼。 但是當我在其resize函數中放置斷點時,我注意到在調整窗口大小時實際上並沒有更新getWidth()

奇怪的是,如果我用不同的組件替換我的Canvas,比如按鈕,那么我沒有問題。 寬度正確更新。

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類繼承的所有組件都可以很好地調整大小。 region.isResizable()方法返回true 另一方面,畫布在調用此方法時返回false

我當然可以通過綁定屬性來使用解決方法。 工作良好。

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

但這讓我更加疑惑,為什么AnchorPane無法完成這項工作。 是有意還是JavaFX錯誤?

覆蓋Canvas.isResizable()以返回true。

然后重寫Canvas.resize()以調用Canvas.setWidth()和Canvas.setHeight()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM