ホームページ >Java >&#&チュートリアル >JavaFX で親に合わせて Canvas のサイズを自動的に変更するにはどうすればよいですか?
外側の親に合わせてキャンバスのサイズを自動的に変更する
外側の親のサイズに合わせてキャンバスのサイズを変更することは、動的なユーザー インターフェイスにとって不可欠です。 JavaFX は、これを実現するためのいくつかのアプローチを提供します。その 1 つは、layoutChildren() メソッドをオーバーライドするネストされたクラスを使用することです。
CanvasPane を使用したアプローチ
CanvasPane クラスは、 Canvas をラップし、Canvas の寸法が周囲の Pane のサイズと常に一致するようにするカスタム ペイン。 CanvasPane のインスタンスを作成し、必要な初期 Canvas 寸法を引数として渡します。 layoutChildren() メソッドをオーバーライドすることにより、CanvasPane のレイアウト アルゴリズムは、使用可能なスペースを満たすように Canvas の位置とサイズを自動的に調整します。
サンプル コード
<code class="java">public class CanvasPane extends Pane { private final Canvas canvas; public CanvasPane(double width, double height) { canvas = new Canvas(width, height); getChildren().add(canvas); } public Canvas getCanvas() { return canvas; } @Override protected void layoutChildren() { super.layoutChildren(); // Retrieve the enclosing Pane's dimensions after layout calculations double x = snappedLeftInset(); double y = snappedTopInset(); double w = snapSize(getWidth()) - x - snappedRightInset(); double h = snapSize(getHeight()) - y - snappedBottomInset(); // Update the Canvas's layout and dimensions canvas.setLayoutX(x); canvas.setLayoutY(y); canvas.setWidth(w); canvas.setHeight(h); } }</code>
親へのバインディング
提供されたコード スニペットでは、Canvas が CanvasPane に追加され、その後、Stage に追加されます。 CanvasPane は CSS3 バインディングを使用してステージの寸法にバインドされているため、キャンバスがステージの利用可能なスペースを常に埋めるようになります。
Java 9 スナップ関数の利用
提供される JavaFX 8 コードには、非推奨の snapSize() メソッドと isResizable() メソッドが含まれています。 Java 9 以降では、snapSizeX() と snapSizeY() を使用して優先サイズを取得し、bind(Observable[]) を活用して同様の機能を実現します。
このアプローチを採用すると、それに合わせて Canvas 自体のサイズが自動的に変更されます。親ノードのディメンションを変更し、より応答性が高く柔軟なユーザー インターフェイスを提供します。
以上がJavaFX で親に合わせて Canvas のサイズを自動的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。