javaFXでキャンバスをサイズ変更可能にするにはどうすればよいですか?



How Make Canvas Resizable Javafx



解決:

サイズ変更可能なキャンバスを設定するのに役立つと思うガイドがあります。

JavaFxのヒント-サイズ変更可能なキャンバス



ガイドからのコードの一部:

/ ** *ヒント1:親ペインのサイズに*サイズ変更するキャンバス。 * / public class Tip1ResizableCanvas extends Application {class ResizableCanvas extends Canvas {public ResizableCanvas(){//サイズが変更されたときにキャンバスを再描画します。 widthProperty()。addListener(evt-> draw()); heightProperty()。addListener(evt-> draw()); } private void draw(){double width = getWidth();ダブルハイト= getHeight(); GraphicsContext gc = getGraphicsContext2D(); gc.clearRect(0、0、幅、高さ); gc.setStroke(Color.RED); gc.strokeLine(0、0、width、height); gc.strokeLine(0、高さ、幅、0); } @Override public boolean isResizable(){return true; } @Override public double prefWidth(double height){return getWidth(); } @Override public double prefHeight(double width){return getHeight(); }} 

与えられたすべての答えの中で、キャンバスをその親と自動的にサイズ変更するという点で、実際に私のために働いたものはありませんでした。私はこれにひびを入れることに決めました、そしてこれは私が思いついたものです:



インポートjavafx.scene.canvas.Canvas; public class ResizableCanvas extends Canvas {@Override public boolean isResizable(){return true; } @Override public double maxHeight(double width){return Double.POSITIVE_INFINITY; } @Override public double maxWidth(double height){return Double.POSITIVE_INFINITY; } @Override public double minWidth(double height){1Dを返す; } @Override public double minHeight(double width){1Dを返す; } @Override public void resize(double width、double height){this.setWidth(width); this.setHeight(height); }}

これは実際にキャンバスを本当にサイズ変更可能にした唯一のものでした。


このアプローチを採用する理由は次のとおりです。

  • 親コンポーネントに送信を強制することでカプセル化を破りたくありませんでした幅とコンストラクターの高さ。これは、キャンバスをで使用できないことも意味します。FXML。
  • 私も親に頼りたくなかった幅としたがって、heightプロパティは、すべてのスペースを占有することにより、キャンバスをその親の唯一の子にします。
  • 最後に、キャンバスは別のクラスで描画を行う必要がありました。つまり、drawメソッドを介したキャンバスへの描画も含む現在受け入れられている回答を使用できませんでした。

このキャンバスでは、キャンバスのサイズを変更するために、親の幅/高さのプロパティにバインドする必要はありません。親が選択したサイズに合わせてサイズを変更するだけです。さらに、キャンバスを使用している人は誰でも、幅/高さのプロパティにバインドして、これらのプロパティが変更されたときに自分の描画を管理できます。




http://werner.yellowcouch.org/log/resizable-javafx-canvas/から取得:JavaFxキャンバスのサイズを変更できるようにするには、min / pref / maxメソッドをオーバーライドするだけです。サイズを変更可能にする サイズ変更メソッドを実装します

この方法では、再描画をトリガーするために幅/高さのリスナーは必要ありません。また、幅と高さのサイズをコンテナにバインドする必要もなくなりました。

public class ResizableCanvas extends Canvas {@Override public double minHeight(double width){return 64; } @Override public double maxHeight(double width){return 1000; } @Override public double prefHeight(double width){return minHeight(width); } @Override public double minWidth(double height){return 0; } @Override public double maxWidth(double height){return 10000; } @Override public boolean isResizable(){return true; } @Override public void resize(double width、double height){super.setWidth(width); super.setHeight(height); }