簡體   English   中英

使用屬性保存和加載JavaFX TableView

[英]Save and load JavaFX TableView using Properties

有這樣做的體面方法嗎? 我用枚舉填充TableView,並使用其getter向列添加值,如下所示:

taskColumn.setCellValueFactory(a -> new SimpleStringProperty(a.getValue().getAssignmentName()));

tableView.getItems().addAll(Tasks.values());

我有很多可編輯的行,用戶可以更改這些行以自定義程序的工作方式,但是每次程序啟動時這樣做都會非常繁瑣。

我要做的是從列中獲取所有值,並使用java.util.Properties保存它們,然后可以將其加載到TableView中,以便用戶下次啟動程序時無需重新配置。

我必須為特定的任務使用“屬性”,但是我對如何使它變得更簡單有任何建議。

一種可能的解決方案是使用CSV格式保存用戶數據。 這是CSV工作的示例。

另一個想法是JSON序列化/反序列化。

如@James_D所提到的,您需要一些項目詳細信息。

我說如果我設法使解決方案生效,我會發布解決方案,這就是我個人的想法。 我使用帶有屬性的Json進行保存和加載。 完全接受建議和批評! 現在,我以傳統方式填充tableview,而不是直接使用枚舉。 對於我想要實現的目標而言,這是糟糕的設計。 感謝@James_D的建議。

private EventHandler<ActionEvent> saveSettings() {
    return event -> {
        JsonArray array = new JsonArray();
        JsonArray tasks = new JsonArray();
        for (int i = 0; i < tableView.getItems().size(); i++) {
            JsonObject task = new JsonObject();
            ObservableList<Info> info = tableView.getItems();
            task.addProperty("Name", info.get(i).getName());
            task.addProperty("Assignment", info.get(i).getAssignment());
            task.addProperty("Skip", info.get(i).isSkip());
            task.addProperty("Bar", info.get(i).getBar());
            tasks.add(task);
        }
        array.add(tasks);
        properties.setProperty("Settings", array.toString());
    };
}

private EventHandler<ActionEvent> loadSettings() {
    return event -> {
        String settings = properties.getProperty("Settings");
        if (settings != null) {
            tableView.getItems().clear();
            JsonParser parser = new JsonParser();
            JsonArray array = parser.parse(settings).getAsJsonArray();
            JsonArray tasks = array.get(0).getAsJsonArray();
            for (int i = 0; i < tasks.size(); i++) {
                JsonObject task = tasks.get(i).getAsJsonObject();
                tableView.getItems().add(new Info(task.get("Name").getAsString(), getAssignment(task.get("Assignment").getAsString()),
                        task.get("Skip").getAsBoolean(), task.get("Bar").getAsInt()));
            }
        }
    };
}

暫無
暫無

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

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