JavaFX:FXML:如何使子项扩展其大小以适合父窗格?

2022-09-01 16:22:10

我已经设法在父fxml(mainMenu UI)下加载了一个子fxml(子UI)。我创建了一个Id为“mainContent”的AnchorPane。此窗格绑定到 4 个边,并且与舞台的一致性变化。

子窗口将加载到“主内容”锚点中。但是,我无法弄清楚如何使孩子与其父级“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 父级的“主内容”AnchorPane。

enter image description here


答案 1

如果将类的方法 、 、 、 设置为 0.0,则子项将被拉伸到父项的完全扩展。staticsetTopAnchor( child, value )setBottomAnchor( ... )setLeftAnchor( ... )setRightAnchor( ... )AnchorPaneNodeAnchorPane

文档链接: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>

答案 2

如果您有一个 ,这是包含 、 、 和 (这可能包括您可能想要加载的任何内容)的子类,则可以将子项的大小绑定到父级中的空间,就像它们在此处所做的那样。现在,将来对父母大小的任何调整都将反映在孩子身上。RegionNodeAxisChartControlPane

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

推荐