有没有一个像样的方法呢?我使用枚举填充TableView并使用其getters向列添加值,如下所示:
taskColumn.setCellValueFactory(a -> new SimpleStringProperty(a.getValue().getAssignmentName()));
tableView.getItems().addAll(Tasks.values());
我有很多可编辑的行,用户可以更改这些行来自定义程序的工作方式,但每次启动程序时这样做都会非常繁琐。
我想要做的是从列中获取所有值并使用java.util.Properties
保存它们,然后我可以将其加载到TableView中,这样用户下次无需重新配置程序推出。
我必须使用属性进行此特定任务,但我对如何使这更简单的任何建议持开放态度。
答案 0 :(得分:0)
答案 1 :(得分:0)
我说我会发布解决方案,如果我设法让它工作,这就是我个人使用的。我使用Json和Properties来保存和加载。完全接受建议和批评!我现在以传统方式填充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()));
}
}
};
}