JavaFX - прослушивать изменения в списке - PullRequest
0 голосов
/ 28 июня 2018

Привет, у меня, наверное, довольно глупый вопрос. Я только начал играть с Properties и ChangeListener s, но ударили по скорости. Я понял, что если я сделаю ObjectProperty, содержащий ArrayList, то любой ChangeListener будет срабатывать только при изменении самого ArrayList. Однако я хочу, чтобы все ChangeListener сработали, если

  1. Сам ArrayList меняется.
  2. Длина изменений ArrayList (то есть элемент добавляется или удаляется).
  3. Элемент в ArrayList заменен на другой.
  4. Изменяется элемент в ArrayList, то есть изменяется содержимое элемента (например, если это пользовательский класс Person. Я хочу запустить ChangeListener, если, например, человек меняет свой возраст .).

Есть ли в JavaFX некоторые функции для этого уже, или я должен реализовать это вручную? Как лучше всего это сделать?

/ Спасибо за любую помощь!

1 Ответ

0 голосов
/ 28 июня 2018

Вы не можете добавить слушателя к обычному 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 есть больше методов, которые вы можете использовать для получения более подробной информации о том, что было изменено. Просто прочитайте об этом!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...