Изменение размеров 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();
}
}