当前位置: 代码迷 >> java >> Java FXML加载视图以供以后使用
  详细解决方案

Java FXML加载视图以供以后使用

热度:84   发布时间:2023-07-26 14:01:18.0

我想将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引用并丢失该文本字段中的数据。 如何保留设置的原始页面?

谢谢,

巴特

我认为您可以在此处使用缓存。 因此,基本上,将加载的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 ,否则它将无法编译。我不确定这是否总是正确的)

  相关解决方案