【问题标题】:Save and load JavaFX TableView using Properties使用属性保存和加载 JavaFX TableView
【发布时间】:2018-01-22 16:20:03
【问题描述】:

有没有合适的方法来做到这一点?我用枚举填充 TableView 并使用它的 getter 向列添加值,如下所示:

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

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

我有很多可编辑的行,用户可以更改它们以自定义程序的工作方式,但是每次启动程序时都这样做会非常乏味。

我想要做的是从列中获取所有值并使用java.util.Properties 保存它们,然后我可以将其加载到 TableView 中,这样用户下次启动程序时就不需要重新配置。

我必须为这个特定的任务使用属性,但我愿意接受任何关于如何让这个更简单的建议。

【问题讨论】:

  • 是的,您当然可以这样做(尽管属性文件可能不是最简单的方法)。您可以通过在表上调用getItems() 并遍历列表来获取值,从每个项目中获取适当的属性(每个项目代表一行)。
  • 你有没有机会展示一下我将如何去做的小sn-p?玩了2天,我不知道该怎么做。顺便说一句,在寻求帮助的同时到处都看到你的帖子,你已经是一个巨大的帮助了!谢谢你:)
  • 不是根据您提供的信息,不,它太模糊了。您应该创建一个minimal reproducible example(一个新的、完整的项目,足以显示您定义表及其数据的方式)。当您提供的只是描述而不是实际示例时,很难提供详细的答案。展示您尝试过的方法并解释出了什么问题。
  • 根据您提供的信息,我想我现在已经知道如何实际执行此操作了。我很感激,詹姆斯。如果没有任何效果,我会回来并发布一个完整的示例。还将为未来的读者发布我的问题的解决方案。

标签: java javafx tableview properties-file


【解决方案1】:

一种可能的解决方案是使用 CSV 格式来保存用户数据。 这是CSV work 的示例。

其他想法是 JSON 序列化/反序列化。

正如@James_D 已经提到的,您需要一些项目详细信息。

【讨论】:

  • 感谢您的建议!我已经设法让它工作,并在下面发布了我使用的解决方案:)
【解决方案2】:

我说如果我设法让它工作,我会发布解决方案,这就是我个人的想法。我使用带有属性的 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()));
            }
        }
    };
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2016-07-02
    • 1970-01-01
    • 2016-09-20
    • 2023-03-11
    • 2017-06-09
    相关资源
    最近更新 更多