有没有办法在数组中加载多个 fxml,然后在按下按钮时显示其中一个而不在 javaFX 中重新加载相同的 fxml?

问题描述

Netbeans IDE 8.2。

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

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

这是它的样子

view main controller

问题

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

因为我知道,每次按下按钮菜单时,它都会运行:

    @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);
    }
}

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

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

gif program to explain my problem

解决方法

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

例如

import numpy as np

img = np.array(img)
img[tuple(indices)].sum(axis = 0)
#array([5,7,9])

Pane dashboardViewPane; Pane prodViewPane;

initialisation

然后

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