JavaFX - 监听列表中的变化
JavaFX - Listen to Changes in List
嗨,我有一个可能很愚蠢的问题。我刚开始玩
Properties
和 ChangeListener
s 但遇到了减速带。我明白如果我制作一个包含 ArrayList
的 ObjectProperty
任何 ChangeListener
只会在 ArrayList
本身发生变化时触发。但是,如果
,我希望所有 ChangeListener
都触发
ArrayList
本身发生了变化。
ArrayList
的长度发生变化(即添加或删除元素)。
ArrayList
中的一个元素被更改为另一个元素。
ArrayList
中的一个元素发生变化,即元素的内容发生变化(例如,如果该元素是自定义 class 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");
}
}
ListChangeListener
中有更多方法可用于获取有关已更改内容的更多详细信息。仔细阅读吧!
嗨,我有一个可能很愚蠢的问题。我刚开始玩
Properties
和 ChangeListener
s 但遇到了减速带。我明白如果我制作一个包含 ArrayList
的 ObjectProperty
任何 ChangeListener
只会在 ArrayList
本身发生变化时触发。但是,如果
ChangeListener
都触发
ArrayList
本身发生了变化。ArrayList
的长度发生变化(即添加或删除元素)。ArrayList
中的一个元素被更改为另一个元素。ArrayList
中的一个元素发生变化,即元素的内容发生变化(例如,如果该元素是自定义 classPerson
。我想触发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");
}
}
ListChangeListener
中有更多方法可用于获取有关已更改内容的更多详细信息。仔细阅读吧!