[英]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中,以便用戶下次啟動程序時無需重新配置。
我必須為特定的任務使用“屬性”,但是我對如何使它變得更簡單有任何建議。
我說如果我設法使解決方案生效,我會發布解決方案,這就是我個人的想法。 我使用帶有屬性的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.