Изменение размеров Canvas вслед за размерами окна - Java

Узнай цену своей работы

Формулировка задачи:

как автоматически менять размеры canvas при изменении размеров окна? пишу такой код:
....
public class Canv extends Application {
GraphicsContext gc;
public void start (Stage myStage) throws Exception{
 
myStage.setTitle("Title");
AnchorPane rootPane = new AnchorPane();
Scene myScene = new Scene(rootPane, 600, 400);
myStage.setScene(myScene);
 
myStage.setMaxWidth(1200.0);
myStage.setMaxHeight(900.0);
myStage.setMinWidth(600.0);
myStage.setMinHeight(400.0);
 
// Canvas
Canvas myCanvas = new Canvas(rootPane.getWidth(), rootPane.getHeight());
gc = myCanvas.getGraphicsContext2D( );
 
// границы холста по которым проверяю изменение
gc.strokeRect(2, 2, myCanvas.getWidth()-3, myCanvas.getHeight()-3);
 
// привязки холста
AnchorPane.setLeftAnchor(myCanvas, 40.0);
AnchorPane.setTopAnchor(myCanvas, 20.0);
AnchorPane.setRightAnchor(myCanvas, 10.0);
AnchorPane.setBottomAnchor(myCanvas, 20.0); 
rootPane.getChildren().add(myCanvas);
myStage.show(); }
public static void main(String[] args) { launch(args); } }
в итоге окно открывается размером как сцена 600 х 400 и холст рисуется размером как сцена 600 х 400, с соответсвующими привязками от края т.е. сам холст выходит за границы окна при изменении размеров окна ни чего не меняется такой же результат если в строке 8 поменять rootPane на myScene
 Scene myScene = new Scene(myScene, 600, 400);

Решение задачи: «Изменение размеров Canvas вслед за размерами окна»

textual
Листинг программы
public class Canv extends Application {
 
    GraphicsContext gc;
 
    public static void main(String[] args) {
        launch(args);
    }
 
    public void start(Stage myStage) throws Exception {
 
        myStage.setTitle("Title");
        AnchorPane rootPane = new AnchorPane();
        Scene myScene = new Scene(rootPane, 600, 400);
        myStage.setScene(myScene);
 
        myStage.setMaxWidth(1200.0);
        myStage.setMaxHeight(900.0);
        myStage.setMinWidth(600.0);
        myStage.setMinHeight(400.0);
 
// Canvas
        Canvas myCanvas = new Canvas(600 - 40 - 10, 400 - 20 - 20);
        gc = myCanvas.getGraphicsContext2D();
 
        myScene.widthProperty().addListener((observable, oldValue, newValue) -> {
            myCanvas.setWidth(myScene.getWidth() - 40 - 10);
            gc.clearRect(0, 0, myCanvas.getWidth(), myCanvas.getHeight());
            gc.strokeRect(2, 2, myCanvas.getWidth() - 3, myCanvas.getHeight() - 3);
        });
        myScene.heightProperty().addListener((observable, oldValue, newValue) -> {
            myCanvas.setHeight(myScene.getHeight() - 20 - 20);
            gc.clearRect(0, 0, myCanvas.getWidth(), myCanvas.getHeight());
            gc.strokeRect(2, 2, myCanvas.getWidth() - 3, myCanvas.getHeight() - 3);
        });
 
// границы холста по которым проверяю изменение
        gc.strokeRect(2, 2, myCanvas.getWidth() - 3, myCanvas.getHeight() - 3);      // сработает только один раз, автообновляться при изменении размеров canvas'а не будет, это не векторное рисование
 
// привязки холста
        AnchorPane.setLeftAnchor(myCanvas, 40.0);
        AnchorPane.setTopAnchor(myCanvas, 20.0);
        rootPane.getChildren().add(myCanvas);
        myStage.show();
    }
}

Оцени полезность:

6   голосов , оценка 3.667 из 5