如何在窗格内加载fxml文件?

2022-09-03 05:12:16

enter image description here

如果我们有一个那么包含2 s,第1个包含,第2个包含是空的,我们可以在这个2nd中加载其他fxml文件吗?StageScenePanePaneButtonPanePane

fxml1: VBox
               |_Pane1-->Button
               |_Pane2
///////////////
fxml2: Pane--> Welcome to fxml 2
"when we click the button load the fxml2 inside Pane2 of fxml1"

然后在单击后

enter image description here


====我在尝试后终于找到了这个作品!====谢谢你们

@FXML Pane secPane;
public void loadFxml (ActionEvent event) {
Pane newLoadedPane =        FXMLLoader.load(getClass().getResource("/application/fxml2.fxml"));
secPane.getChildren().add(newLoadedPane); 
}  

答案 1

我终于在尝试后找到了这个作品!

@FXML Pane secPane;
public void loadFxml (ActionEvent event)  {
  Pane newLoadedPane =  FXMLLoader.load(getClass().getResource("/application/fxml2.fxml"));
  secPane.getChildren().add(newLoadedPane);
}

答案 2

仅替换控制器类中的字段不会更改场景图。

secPane只是对场景图中节点的引用。

如果 只是一个占位符,则可以在父级的子列表中替换它:secPane

public void loadFxml (ActionEvent event) {
    // load new pane
    Pane newPane = FXMLLoader.load(getClass().getResource("/application/Login2.fxml"));

    // get children of parent of secPane (the VBox)
    List<Node> parentChildren = ((Pane)secPane.getParent()).getChildren();

    // replace the child that contained the old secPane
    parentChildren.set(parentChildren.indexOf(secPane), newPane);

    // store the new pane in the secPane field to allow replacing it the same way later
    secPane = newPane;
}

当然,这假设产生正确的资源并且不返回(如果没有具有给定名称的资源可用,则会发生这种情况)getClass().getResource("/application/Login2.fxml")null


推荐