JavaFXでサイズ変更可能なcanvasを作る:その2
前回のコードに円を追加してみますた。
色は緑で中心点は画面の中心点と一緒ですが、ウィンドウの大きさの変更に合わせて、大きさも変わります。
起動させるとこう。
横に伸ばすと、びろーん。
縦方向だとこう。
このくらいでだいたいまん丸になるかな。
Tip1ResizableCanvas.java
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; /** * Tip 1: A canvas resizing itself to the size of * the parent pane. */ public class Tip1ResizableCanvas extends Application { class ResizableCanvas extends Canvas { public ResizableCanvas() { // Redraw canvas when size changes. widthProperty().addListener(evt -> draw()); heightProperty().addListener(evt -> draw()); } private void draw() { double width = getWidth(); double height = getHeight(); GraphicsContext gc = getGraphicsContext2D(); gc.clearRect(0, 0, width, height); gc.setStroke(Color.RED); gc.strokeLine(0, 0, width, height); gc.strokeLine(0, height, width, 0); double c_width = width / 4; double c_height = height / 4; gc.setFill(Color.GREEN); gc.fillOval((width / 2) - (c_width / 2), (height / 2) - (c_height / 2), c_width, c_height); } @Override public boolean isResizable() { return true; } @Override public double prefWidth(double height) { return getWidth(); } @Override public double prefHeight(double width) { return getHeight(); } } @Override public void start(Stage stage) throws Exception { ResizableCanvas canvas = new ResizableCanvas(); StackPane stackPane = new StackPane(); stackPane.getChildren().add(canvas); // Bind canvas size to stack pane size. canvas.widthProperty().bind( stackPane.widthProperty()); canvas.heightProperty().bind( stackPane.heightProperty()); stage.setScene(new Scene(stackPane)); stage.setTitle("Tip 1: Resizable Canvas"); // stage.setTitle("Tip 1"); stage.show(); } public static void main(String[] args) { launch(args); } }
起動直後の、この画面のデフォルトのサイズってどこで決まってるんだろうなと。
親クラスであるNodeクラスからCanvasが継承している、prefWidth(),prefHeigtht()辺りが怪しいのかな、とも思うけどよくわからない。
Java技術最前線 - JavaFX 2で始めるGUI開発 第7回 レイアウト その1:ITpro
こちらより、
ノードで指定できるサイズを決めるための情報には次の3種類があります。
最小サイズ minWidth、minHeight
推奨サイズ prefWidth、prefHeight
最大サイズ maxWidth、maxHeight
この内の、推奨サイズとやらが画面のサイズになっているということなのかな?
Oracleおじさんのページへのリンクも張っとくぞ、と。