JavaFX - 监听列表中的变化

标签 javafx arraylist changelistener

嗨,我有一个可能很愚蠢的问题。我刚开始玩 PropertiesChangeListener 但遇到了减速带。我明白如果我制作一个包含 ArrayListObjectProperty 任何 ChangeListener 只会在 ArrayList 本身发生变化时触发.但是,我希望所有 ChangeListener 在以下情况下触发

  1. ArrayList 本身发生了变化。
  2. ArrayList 的长度发生变化(即添加或删除元素)。
  3. ArrayList 中的一个元素被更改为另一个元素。
  4. 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");
    }
}

ListChangeListener 中还有更多方法您可以使用它来获取有关已更改内容的更多详细信息。仔细阅读吧!

关于JavaFX - 监听列表中的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51081000/

相关文章:

JavaFX 嵌入自定义字体不起作用

java - Java 中的递归方法,返回一个整数数组列表(仅其中一个),其总和为一个数字,如果没有则为 null

java - 为什么我的程序无法识别我的方法?

Java Swing - 知道选项卡是否已在 ChangeListener 中删除/添加

java - 如何为循环中创建的 100 个文本字段创建一个changeListener?

java - JavaFX 中的寻路

java - 从任何地方访问组合框值

JavaFX 应用程序不会因 swing 内容而关闭

Java:循环和乘法

java - "AWT-EventQueue-0"java.lang.NullPointerException"ChangeListener执行时出错