ホームページ  >  記事  >  Java  >  JavaFX で親に合わせて Canvas のサイズを自動的に変更するにはどうすればよいですか?

JavaFX で親に合わせて Canvas のサイズを自動的に変更するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 16:12:01644ブラウズ

How can I make a Canvas automatically resize to fit its parent in JavaFX?

外側の親に合わせてキャンバスのサイズを自動的に変更する

外側の親のサイズに合わせてキャンバスのサイズを変更することは、動的なユーザー インターフェイスにとって不可欠です。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。