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

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

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

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

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

textual
Листинг программы
  1. public class Canv extends Application {
  2.  
  3.     GraphicsContext gc;
  4.  
  5.     public static void main(String[] args) {
  6.         launch(args);
  7.     }
  8.  
  9.     public void start(Stage myStage) throws Exception {
  10.  
  11.         myStage.setTitle("Title");
  12.         AnchorPane rootPane = new AnchorPane();
  13.         Scene myScene = new Scene(rootPane, 600, 400);
  14.         myStage.setScene(myScene);
  15.  
  16.         myStage.setMaxWidth(1200.0);
  17.         myStage.setMaxHeight(900.0);
  18.         myStage.setMinWidth(600.0);
  19.         myStage.setMinHeight(400.0);
  20.  
  21. // Canvas
  22.         Canvas myCanvas = new Canvas(600 - 40 - 10, 400 - 20 - 20);
  23.         gc = myCanvas.getGraphicsContext2D();
  24.  
  25.         myScene.widthProperty().addListener((observable, oldValue, newValue) -> {
  26.             myCanvas.setWidth(myScene.getWidth() - 40 - 10);
  27.             gc.clearRect(0, 0, myCanvas.getWidth(), myCanvas.getHeight());
  28.             gc.strokeRect(2, 2, myCanvas.getWidth() - 3, myCanvas.getHeight() - 3);
  29.         });
  30.         myScene.heightProperty().addListener((observable, oldValue, newValue) -> {
  31.             myCanvas.setHeight(myScene.getHeight() - 20 - 20);
  32.             gc.clearRect(0, 0, myCanvas.getWidth(), myCanvas.getHeight());
  33.             gc.strokeRect(2, 2, myCanvas.getWidth() - 3, myCanvas.getHeight() - 3);
  34.         });
  35.  
  36. // границы холста по которым проверяю изменение
  37.         gc.strokeRect(2, 2, myCanvas.getWidth() - 3, myCanvas.getHeight() - 3);      // сработает только один раз, автообновляться при изменении размеров canvas'а не будет, это не векторное рисование
  38.  
  39. // привязки холста
  40.         AnchorPane.setLeftAnchor(myCanvas, 40.0);
  41.         AnchorPane.setTopAnchor(myCanvas, 20.0);
  42.         rootPane.getChildren().add(myCanvas);
  43.         myStage.show();
  44.     }
  45. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут