Изменение размеров Canvas вслед за размерами окна - Java
Формулировка задачи:
как автоматически менять размеры canvas при изменении размеров окна?
пишу такой код:
в итоге окно открывается размером как сцена 600 х 400
и холст рисуется размером как сцена 600 х 400, с соответсвующими привязками от края
т.е. сам холст выходит за границы окна
при изменении размеров окна ни чего не меняется
такой же результат если в строке 8 поменять rootPane на myScene
Листинг программы
- ....
- 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); } }
Листинг программы
- 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();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д