Изменение размеров 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д