いろいろ調べた結果、
自分で3つの方法を見つけました。
イベントを設定する
この方法は単純にScene
のwidthとheightのPropertyにイベントを追加して、
変更され次第、新しいサイズをノードに適応している。
質問中のイベントでやる方法というのが、これです。
Java
1scene.widthProperty().addListener(new ChangeListener<Number>() {
2 @Override public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneWidth, Number newSceneWidth) {
3 pane().setPrefWidth(newSceneWidth.doubleValue());
4 }
5});
6scene.heightProperty().addListener(new ChangeListener<Number>() {
7 @Override public void changed(ObservableValue<? extends Number> observableValue, Number oldSceneHeight, Number newSceneHeight) {
8 pane().setPrefHeight(newSceneHeight.doubleValue());
9 }
10});
11ただ、イベントを介してるせいか、若干黒い部分がガビガビしてて気持ち悪いし、
12シーンのサイズがpaneの最小サイズ(minPrefSize)以下になると、
13挙動がめちゃくちゃになるのであんまオススメしません。
14
シーンのサイズにバインドする
これは、シーンのサイズのPropertyにpaneのサイズのPropertyをバインドして関連付けてしまうというものです。
が、残念ながらそれができるのはRegion
同士のみなので、できません。
ですが、この方法だと、子→親だけに限らず、親→子というバインドも可能なので、
子のノードのサイズに合わせたい時に使えると思います。
一応ソース
Java
1root.prefHeightProperty().bind(parent.prefHeightProperty());
2root.prefWidthProperty().bind(parent.prefWidthProperty());
root
,parent
はともにRegion
アンカーを設定する。
あ、できるんだな。ってことがわからなかったので思いつきませんでした。
シーンにpaneをアンカー設定してしまえば大丈夫です。はい。
Java
1AnchorPane.setTopAnchor(pane, 0d);
2AnchorPane.setBottomAnchor(pane, 0d);
3AnchorPane.setLeftAnchor(pane, 0d);
4AnchorPane.setRightAnchor(pane, 0d);
これで大丈夫でした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。