有没有一种方法可以在数组中加载多个 fxml,然后在按下按钮时显示其中一个,而无需在 javaFX 中重新加载相同的 fxml?

Is there a way to load multiple fxml in array and then showing one of them if button is pressed without reloading same fxml in javaFX?

Netbeans IDE 8.2.

我的程序在 VBox 中插入了一个左侧菜单栏。

当我单击左侧菜单按钮之一时,我的程序会在同一阶段加载另一个控制器(当然还有另一个 .fxml)。而且没关系。

这是它的样子

问题

如果我开始对这个新控制器进行一些更改,然后我想通过单击左侧菜单按钮打开另一个控制器,我的“旧”控制器就会消失(没关系)。但是当我再次打开旧控制器时,我在该页面中所做的所有更改都消失了。

因为我知道,每次按下按钮菜单时 运行 这个:

    @FXML
public void btnMenuOnAction(ActionEvent event) {
    if (event.getTarget() == btnDashboard) 
    {
        Pane newPane = null;
        try {
            newPane = FXMLLoader.load(getClass().getResource("Dashboard_View.fxml"));
        } catch (IOException ex) {
            System.out.println("Error pane Dashboard");
        }
        pane.getChildren().set(0, newPane);
    } 
    else if (event.getTarget() == btnProduction)
    {
        Pane newPane = null;
        try {
            newPane = FXMLLoader.load(getClass().getResource("Prod_View.fxml"));
        } catch (IOException ex) {
            System.out.println("Error pane Prod");
        }
        pane.getChildren().set(0, newPane);
    }
}

当用户从菜单中选择一个类别时,我需要能够在右侧编辑设置,切换到另一个类别并进行更多更改。如果我 return 到第一个类别,那里所做的更改仍然存在。 因此,每次用户更改类别时,FXMLLoader 都会重新加载 FXML 文件和控制器,将其中的所有控件重置为其默认值。

那么是否可以重复使用已经加载和更改的 FXML 文件? 如何在我的程序启动之前加载每个 fxml,并在单击按钮时使其在我的窗格中可见?

您必须在启动时(或首次请求时)创建每个 FXML 文件,并且每次只需将窗格设置为相同的实例。

例如

Pane dashboardViewPane;
Pane prodViewPane;

initialisation

dashboardViewPane = FXMLLoader.load(getClass().getResource("Dashboard_View.fxml"));
prodViewPane = FXMLLoader.load(getClass().getResource("Prod_View.fxml"));

然后

@FXML
public void btnMenuOnAction(ActionEvent event) {
    if (event.getTarget() == btnDashboard) 
    {
        pane.getChildren().clear();
        pane.getChildren().add(dashboardViewPane);
    } 
    else if (event.getTarget() == btnProduction)
    {
        pane.getChildren().clear();
        pane.getChildren().add(prodViewPane);
    }
}