java - ObservableList 不更新 ArrayList

标签 java javafx observablelist

对于一项学校作业,我们正在使用 JavaFX 中的 ObservableList 对象(对吧?)。我已经为此工作了一天多,但无法弄清楚。老师只告诉我们“用谷歌搜索”,所以这也没有帮助..

基本上,我们正在开发一个基本的管理应用程序来跟踪人们及其家人。人们是一个家庭的成员,一个家庭可以有多个成员。

当一个人或家庭被添加时,他们被添加到一个 observableList 中,应该然后更新一个 ArrayList(因此数据可以被序列化)和一个 GUI 元素。这就是问题所在。

我们目前有以下实现:

private List<Persoon> personen;
private List<Gezin> gezinnen;
this.personen = new ArrayList<Persoon>();
this.gezinnen = new ArrayList<Gezin>();

private transient ObservableList<Persoon> observablePersonen;
private transient ObservableList<Gezin> observableGezinnen;
observablePersonen = FXCollections.observableArrayList(personen);
observableGezinnen = FXCollections.observableArrayList(gezinnen);

然后当添加一个项目时,我们执行以下操作:

Persoon p = new Persoon();
observablePersonen.add(p);
observablePersonen.notifyAll();

在此之后,当我们检查“personen”列表时,添加的对象不存在 :(

我们是否遗漏了一些明显的东西?

最佳答案

您需要使用 FXCollections.observableList而不是 FXCollections.observableArrayList .

根据 observableList 的文档:

Constructs an ObservableList that is backed by the specified list.

因此,可观察列表的任何修改都将报告给支持列表。但是,在 observableArrayList 的情况下:

Creates a new observable array list and adds a content of collection col to it.

所以这个列表不受给定列表的支持,它只是作为一个初始集合。

作为旁注,您不应该调用 notifyAll():此方法与 JavaFX 无关,它与唤醒等待此对象的线程有关。

关于java - ObservableList 不更新 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32907813/

相关文章:

java - 信任库中的根证书是否足以建立连接?

java - 从 Controller 访问域对象

java - 如何从媒体对象获取元数据

java - 添加重复项时,如何更新 TableView 中的行(而不是添加新行)? [JavaFX]

java - 出现奇怪的 java.lang.NoSuchMethodError 错误

java - 更改选择 JComboBox 列中的值

javafx - ControlsFX:如何向 CheckComboBox 添加标题?

java - Android:检测 ObservableList 中已删除的项目

JavaFX : How to fill a ComboBox with changing values and refrech it

java - JPA:即使使用了 getter 方法,延迟加载也不会加载。希望如此?