web-dev-qa-db-ja.com

JavaFX:FXML:親ペインに合うように子のサイズを拡張するにはどうすればよいですか?

親fxml(mainMenu UI)の下に子fxml(sub UI)を読み込むことができました。 id "mainContent"でAnchorPaneを作成しました。このペインは4つの側面にバインドされており、ステージに応じて変化します。

子ウィンドウは「mainContent」アンカーペインにロードされます。ただし、子をその親「mainContent」と一緒に変更する方法を理解することはできません。

私の子UIはこのように呼び出されます。

@FXML
private void mnuUserLevel_onClick(ActionEvent event) {
    FXMLLoader loader = new FXMLLoader(getClass().getResource("DBedit.fxml"));
    loader.setController(new DBeditEntityUserlevel());

    try {
           Node n = (Node)loader.load();
           mainContent.getChildren().add(n);
    } catch (IOException e){
           System.out.println(e.getMessage());
    }
}

私の質問をさらに説明するために、私のスナップショットをご覧ください。赤い四角は子です。黄色の四角は、MainMenu親の「mainContent」AnchorPaneです。

enter image description here

20
Dean Chiu

AnchorPane内のペインのtopAnchor、bottomAnchor、leftAnchor、rightAnchorの値を0.0パネルは、周囲のAnchorPaneの全長に引き伸ばされます。

ドキュメントリンク: AnchorPane

編集:ドキュメントリンクでは、Javaコードでこれらの値を設定する方法も確認できます。

FXMLの例:

<AnchorPane fx:id="mainContent" ...>
<StackPane fx:id="subPane" AnchorPane.topAnchor="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" ></StackPane>
</AnchorPane>
42
Sascha B

RegionNodeAxisChart、およびControlを含むPaneサブクラスがある場合、これにはおそらくロードしたいものが含まれます) bind親のスペースに対する子のサイズ here と同様です。これで、親のサイズの将来の調整が子に反映されます。

Region n = (Region)loader.load();
mainContent.getChildren().add(n);
n.prefWidthProperty().bind(mainContent.widthProperty());
n.prefHeightProperty().bind(mainContent.heightProperty());
26
EthanP

インターフェイスの構造を見ると、この提案では親コンテナとしてBorderPaneを使用した方が良いと思います。BorderPaneコンテナ内でAnchorPaneを直接使用しないでください。

-> BorderPane-Top = "メニュー"

-> BorderPane-Center =別のコンテナ(SplitPane、別のBorderPaneなどになりますが、AnchorPaneではありませんが、必要に応じて試すことができます)

-> BorderPane-Bottom =別のコンテナー(情報や通知などのためのボタンまたはラベルのあるhboxである可能性があります。)

0
mike_s

PrefWidthを設定してみてください。理由はわかりませんが、newPaneをAnchorPaneに参照した後にSceneBuilderで設定されたprefWidthを使用するようです。

Node newPane = FXMLLoader.load(getClass().getResource("view/YourPane.fxml"));
List<Node> parentChildren = ((Pane)yourAnchorPaneId.getParent()).getChildren();
parentChildren.set(parentChildren.indexOf(yourAnchorPaneId), newPane);
yourAnchorPaneId.setPrefWidth(1800); // 1800 just example value for test
Main.primaryStage.setWidth(500); // 500 example value with which you wishe to start app
0
blumberk1990