嗨,我有一个可能很愚蠢的问题。我才刚开始玩
Properties
和ChangeListener
s,但遇到了减速。我了解,如果我制作包含ObjectProperty
的{{1}},则只有ArrayList
本身发生变化时,任何ChangeListener
才会触发。但是我希望所有ArrayList
都可以触发
ChangeListener
本身发生了变化。ArrayList
的长度发生变化(即添加或删除了元素)。ArrayList
中的元素已更改为另一个元素。ArrayList
中的一个元素发生了变化,即元素的内容发生了变化(例如,如果该元素是自定义类ArrayList
。我想触发Person
人会改变她的年龄。)JavaFX中是否已经有此功能,还是应该手动实现?最好的方法是什么?
/感谢您的帮助!
答案 0 :(得分:2)
您无法将侦听器添加到常规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");
}
}
ListChangeListener
中有更多方法可用于获取有关已更改内容的更多详细信息。只需阅读一下即可!