【发布时间】:2017-02-27 15:54:26
【问题描述】:
不知何故,虽然在 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() 方法是在调用此方法之后调用的,所以我认为这不应该是问题。
【问题讨论】:
-
很大的帮助是在这里查看您的应用程序扩展类,看看它是如何完成的
-
你是如何添加新项目的?
-
如果我是正确的,您首先将电台添加到 JSON 中,然后使用 getStations() 读取它?你需要更新 observableList 让听众知道发生了什么变化 - @James_D 已经回答了我的 +1
-
顺便说一句:永远不要使用刷新 - 即使它看起来可以工作,它也很有可能在你的更新代码中隐藏了一些问题