簡體   English   中英

Java FXML加載視圖以供以后使用

[英]Java FXML Loading a view for later use

我想將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 ,否則它將無法編譯。我不確定這是否總是正確的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM