问题描述
Netbeans IDE 8.2。
当我单击左侧菜单按钮之一时,我的程序会在同一阶段加载另一个控制器(当然还有另一个 .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);
}
}
当用户从菜单中选择一个类别时,我需要能够编辑右侧的设置、切换到另一个类别并进行更多更改。如果我回到第一类,那里所做的更改仍然存在。 因此,每次用户更改类别时,FXMLLoader 都会重新加载 FXML 文件和控制器,将其中的所有控件重置为其默认值。
那么是否可以重用已加载和更改的 FXML 文件? 如何在我的程序启动之前加载每个 fxml 并在单击按钮时使其在我的窗格中可见?
解决方法
您必须在启动时(或在第一次需要时)创建每个 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"));