gpt4 book ai didi

JavaFX - 监听列表中的变化

转载 作者:行者123 更新时间:2023-12-01 22:06:55 30 4
gpt4 key购买 nike

嗨,我有一个可能很愚蠢的问题。我刚开始玩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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com