Iva*_*son 2 javafx arraylist changelistener
嗨,我有一个可能很愚蠢的问题。我刚刚开始玩弄
Properties
和ChangeListener
s 但遇到了减速带。我明白,如果我制作一个ObjectProperty
包含ArrayList
any 的对象ChangeListener
,则只有在其本身发生变化时才会触发ArrayList
。不过我希望所有的ChangeListener
s 都能开火,如果
ArrayList
本身发生变化。ArrayList
(即添加或删除元素)。ArrayList
更改为另一个元素。ArrayList
,即元素的内容发生更改(Person
例如,如果该元素是自定义类。例如,如果该人更改了她的年龄,我想触发该元素ChangeListener
。)。JavaFX 中是否已经有一些功能可以实现此目的,或者我应该手动实现此功能?最好的方法是什么?
/谢谢你的帮助!
您无法将侦听器添加到常规中,ArrayList
因为它是不可观察的。然而,该FXCollections
包确实提供了一个ObservableArrayList<E>
允许您监听更改的方法。
这是一个演示程序:
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
public class Main {
public static void main(String[] args) {
ObservableList<String> strings = FXCollections.observableArrayList();
strings.addAll("One", "Two", "Three");
strings.addListener((ListChangeListener<String>) change -> {
while (change.next()) {
if (change.wasAdded()) {
System.out.println(change.getAddedSubList().get(0)
+ " was added to the list!");
} else if (change.wasRemoved()) {
System.out.println(change.getRemoved().get(0)
+ " was removed from the list!");
}
}
});
strings.add("Dogs");
strings.remove("Two");
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用更多方法来ListChangeListener
获取有关更改内容的更多详细信息。仔细阅读一下吧!