JavaFX-侦听列表中的更改

时间:2018-06-28 10:49:36

标签: javafx arraylist changelistener

嗨,我有一个可能很愚蠢的问题。我才刚开始玩 PropertiesChangeListener s,但遇到了减速。我了解,如果我制作包含ObjectProperty的{​​{1}},则只有ArrayList本身发生变化时,任何ChangeListener才会触发。但是我希望所有ArrayList都可以触发

  1. ChangeListener本身发生了变化。
  2. ArrayList的长度发生变化(即添加或删除了元素)。
  3. ArrayList中的元素已更改为另一个元素。
  4. ArrayList中的一个元素发生了变化,即元素的内容发生了变化(例如,如果该元素是自定义类ArrayList。我想触发Person人会改变她的年龄。)

JavaFX中是否已经有此功能,还是应该手动实现?最好的方法是什么?

/感谢您的帮助!

1 个答案:

答案 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中有更多方法可用于获取有关已更改内容的更多详细信息。只需阅读一下即可!