当前位置: 首页 > 知识库问答 >
问题:

JavaFX-侦听列表中的更改

陆琦
2023-03-14

嗨,我有一个很可能很愚蠢的问题。我刚开始玩弄属性和ChangeListener,但遇到了一个障碍。我知道,如果我创建了一个包含数组列表的对象属性,那么只有当数组列表本身发生变化时,任何ChangeListener才会启动。但是,如果出现以下情况,我希望所有ChangeListener都启动

  1. 阵列列表本身会更改
  2. 数组列表的长度会更改(即添加或删除元素)
  3. 将ArrayList中的元素更改为其他元素
  4. 数组列表中的一个元素发生了变化,即元素的内容发生了变化(例如,如果该元素是一个自定义类Person。例如,如果此人改变了年龄,我想启动ChangeListener)

JavaFX中是否已经有了一些功能,或者我应该手动实现这些功能?最好的方法是什么?

/Thanks任何帮助!

共有1个答案

甘明朗
2023-03-14

您不能将侦听器添加到常规ArrayList,因为它是不可观察的。但是,FXCollection包确实提供了可观察的ArrayList

以下是演示程序:

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中还有更多方法,您可以使用它们来获取有关已更改内容的更多详细信息。请阅读它!

 类似资料:
  • 问题内容: 我想一种添加到我当过用户更改的,它的值,应用程序在控制台上打印的东西。 我进行了搜索,发现以下非常相似的问题:JTextField的值更改侦听器 提到的问题的答案非常清楚和有效,但是不幸的是,它仅对(Not )有用,因为它说您应该像这样使用DocumentListener: 但是在JavaFX的TextField中,您无法执行此操作。所以?解决办法是什么? (使用代码进行描述可能会很好

  • 问题内容: 我当时在上网,但找不到很好的信息。我试图在每次运行应用程序时检测按键。我正在使用JavaFX并将其与FXML一起运行。我尝试了很多事情,但没有任何效果。请帮我。 问题答案: 您应该签出Ensemble示例。这是关键的侦听器代码。

  • 问题内容: 我有这个代码 尽管我仍未使用userdata,但事实是,每当我单击切换按钮时,我都会获得升序的所需输出。 这是输出: 在第一次单击中,我什么也没得到。 从第二次单击开始,我开始获得这种输出。谁能解释这种行为并为我提供解决方案? 问题答案: 该方法中的所有代码都应转到控制器的方法中。 现在,在第一个切换上单击,为设置数据,然后将它们放入组中,然后在上设置侦听器。因此,仅在第二次切换单击时

  • 我想在我的中添加一种,当用户更改的值时,应用程序会在控制台上打印一些内容。 我搜索了一下,发现了以下非常类似的问题:将Listener值更改为JTextField 上述问题的答案非常清晰有效,但不幸的是,它只对(而不是)有用,因为它说您应该像这样使用DocumentListener: 但在JavaFX的文本字段中,您无法执行此操作。所以解决办法是什么? (用代码描述可能非常好,但如果不可能,任何提

  • 在我的代码中,如果用户在ComboBox 2中输入值,它将反映在TextField中,但是如果用户从ComboBox 1的下拉列表中选择,而不更改ComboBox 2中的值,那么TextField中的值将保持不变,它不会更改。我做错了吗? 测试2。txt:1任何帮助都将不胜感激!

  • 本文向大家介绍Android 侦听SharedPreferences更改,包括了Android 侦听SharedPreferences更改的使用技巧和注意事项,需要的朋友参考一下 示例 请注意: 仅当添加或更改值时,侦听器才会触发,设置相同的值将不会调用它; 侦听器需要保存在成员变量中,而不是匿名类,因为registerOnSharedPreferenceChangeListener它使用弱引用进