親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です。
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>
Region
(Node
、Axis
、Chart
、およびControl
を含むPane
のサブクラスがある場合、これにはおそらくロードしたいものが含まれます) bind親のスペースに対する子のサイズ here と同様です。これで、親のサイズの将来の調整が子に反映されます。
Region n = (Region)loader.load();
mainContent.getChildren().add(n);
n.prefWidthProperty().bind(mainContent.widthProperty());
n.prefHeightProperty().bind(mainContent.heightProperty());
インターフェイスの構造を見ると、この提案では親コンテナとしてBorderPaneを使用した方が良いと思います。BorderPaneコンテナ内でAnchorPaneを直接使用しないでください。
-> BorderPane-Top = "メニュー"
-> BorderPane-Center =別のコンテナ(SplitPane、別のBorderPaneなどになりますが、AnchorPaneではありませんが、必要に応じて試すことができます)
-> BorderPane-Bottom =別のコンテナー(情報や通知などのためのボタンまたはラベルのあるhboxである可能性があります。)
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