gpt4 book ai didi

java - ListView.refresh() 不起作用

转载 作者:行者123 更新时间:2023-12-01 20:55:08 25 4
gpt4 key购买 nike

不知何故,尽管JavaDoc中有说明,但方法refresh()对我不起作用,只能通过再次调用setItems()来工作,这需要花费大量时间,尤其是当关联的ObservableList很长时,对我有用。这是我的源代码:

NetworkManager 类,getStations() 方法

ObservableList<Station> getStations() {
ObservableList<Station> stations = FXCollections.observableArrayList();
JsonArray jsonArray = getRootElement().getAsJsonObject().getAsJsonArray("stations");
for(JsonElement currentElement : jsonArray) {
stations.add(gson.fromJson(currentElement, Station.class));
}
return stations;
}

然后我在 JavaFX 初始化方法中建立 ListView 和此方法之间的连接:

listView.setItems(networkManager.getStations());

现在,如果我注册一个新的 Station 对象并使用

listView.refresh();

ListView 不会刷新,只有这个有效:

listView.setItems(networkManager.getStations());

这里出了什么问题?

肯塔1561

编辑:我的应用程序类扩展主类:

package de.kenta1561.enr.main.java;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.TabPane;
import javafx.stage.FileChooser;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.Window;

import java.io.File;
import java.io.IOException;

public class EasyNetworkRegistration extends Application {

private File file;
private Controller controller;

private boolean fileCreated;

@Override
public void start(Stage primaryStage) throws Exception {
showFileChooser(primaryStage);
FXMLLoader loader = new FXMLLoader(getClass().getResource("/de/kenta1561/enr/main/resources/EasyNetworkRegistration.fxml"));
TabPane pane = loader.load();
controller = loader.getController();
initializeController();
Scene scene = new Scene(pane);
primaryStage.setScene(scene);
primaryStage.setTitle("EasyNetworkRegistration");
primaryStage.show();
setCenter(primaryStage);
}

如何将电台添加到我的 JSON 文件中:

void addStation(Station station) {
JsonObject rootObject = getRootElement().getAsJsonObject();
JsonArray jsonArray = rootObject.getAsJsonArray("stations");
jsonArray.add(gson.toJsonTree(station));
writeToFile(rootObject);
}

PS:显然,refresh() 方法是在调用此方法之后调用的,因此我认为这不应该是问题。

最佳答案

您的 addStation 方法所做的唯一事情就是更新 JSON 文件。表不可能知道任何事情发生了变化。对 refresh() 的调用只是从同一个 ObservableList 重新加载数据,同样,您没有更改该数据。

考虑将新站直接添加到可观察列表中:

void addStation(Station station) {
JsonObject rootObject = getRootElement().getAsJsonObject();
JsonArray jsonArray = rootObject.getAsJsonArray("stations");
jsonArray.add(gson.toJsonTree(station));
writeToFile(rootObject);
listView.getItems().add(station);
}

(如果您的 Controller 中没有 addStation,请以明显的方式重构此内容。)

应该不需要调用refresh()

关于java - ListView.refresh() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42490107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com