问题描述
我想将FXML视图加载到程序中并保存该视图以供以后使用。
我目前有一个窗格,可以切换出FXML文件。
@FXML private Pane contentPane;
@FXML
public void toHome() {
contentPane.getChildren().setAll(FXMLLoader.load(getClass().getResource("../fxml/Home.fxml")));
}
@FXML
public void toBrowse() {
contentPane.getChildren().setAll(FXMLLoader.load(getClass().getResource("../fxml/Browse.fxml")));
}
问题是我在每个新的FXML页面上都有文本字段,并且当我切换页面时,我不希望它创建新的FXML引用并丢失该文本字段中的数据。 如何保留设置的原始页面?
谢谢,
巴特
1楼
我认为您可以在此处使用缓存。 因此,基本上,将加载的fxml存储在哈希图中。
如果它不在其中,则将其加载并存储到哈希图中,否则从哈希图中获取并使用它。 这篇解释说,缓存加载的FXML对象很好,例如,关于性能,请参见此处提到的“缓存FXML加载节点树和控制器”一章。
private static Map<String, Object> map = new HashMap<>();
@FXML
private Pane contentPane;
@FXML
public void toHome() throws IOException {
Object loaded = map.get("home");
if (loaded == null) {
loaded = FXMLLoader.load(getClass().getResource("../fxml/Home.fxml"));
map.put("home", loaded);
}
contentPane.getChildren().setAll((Node) loaded);
}
(我必须将强制类型转换插入Node
,否则它将无法编译。我不确定这是否总是正确的)