Spec-Zone.ru › OpenJavaFX 11
Модуль javafx.base
Пакет javafx.collections

Класс ListChangeListener.Change<E>

  • java.lang.Object
    • javafx.collections.ListChangeListener.Change<E>
  • Тип параметров:
    E - тип элемента списка
    Вложенный интерфейс:
    ListChangeListener<E>
    public abstract static class ListChangeListener.Change<E>
    extends Object
    Представляет отчёт о изменениях, внесённых в ObservableList. Изменение может состоять из одного или нескольких фактических изменений и должно итерироваться путём вызова метода next(). Каждое изменение должно быть одним из следующих:
    • Перестановки : wasPermutated() возвращает true в этом случае. Перестановка произошла в диапазоне от from (включительно) до to (исключительно), и её можно запросить, вызвав метод getPermutation(int).
    • Добавление или удаление : В этом случае хотя бы одно из wasAdded(), wasRemoved() возвращает true. Если оба метода возвращают true, wasReplaced() также вернёт true.

      Метод getRemoved() возвращает список элементов, которые были заменены или удалены из списка.

      Диапазон от from (включительно) до to (исключительно) обозначает подсписок списка, содержащий новые элементы. Обратите внимание, что это полуоткрытый интервал, поэтому если элементы не были добавлены, getFrom() равно getTo().

      Список добавленных элементов можно получить, вызвав getAddedSubList().

      Обратите внимание, что для поддержания правильных индексов отдельных изменений добавления/удаления, эти изменения должны быть отсортированы по их from индексу.

    • Обновление : wasUpdated() вернёт true при изменении. Все элементы между from (включительно) и to (исключительно) были обновлены.
    Важно: Необходимо вызвать метод next() перед вызовом любого другого метода Change. То же самое относится и после вызова reset(). Единственный метод, который работает в любое время, это getList().

    Типичным применением является наблюдение за изменениями в ObservableList для подключения или отключения (или добавления или удаления слушателя) или для поддержания какого-либо инварианта на каждом элементе в этом ObservableList. Общий шаблон кода для этого выглядит примерно так:

     ObservableList<Item> theList = ...;
    
     theList.addListener(new ListChangeListener<Item>() {
         public void onChanged(Change<Item> c) {
             while (c.next()) {
                 if (c.wasPermutated()) {
                     for (int i = c.getFrom(); i < c.getTo(); ++i) {
                          //permutate
                     }
                 } else if (c.wasUpdated()) {
                          //update item
                 } else {
                     for (Item remitem : c.getRemoved()) {
                         remitem.remove(Outer.this);
                     }
                     for (Item additem : c.getAddedSubList()) {
                         additem.add(Outer.this);
                     }
                 }
             }
         });
    
     }

    Предупреждение: Этот класс напрямую обращается к исходному списку для получения информации о изменениях.
    Это делает объект Change недействительным при возникновении другого изменения в списке.
    Поэтому небезопасно использовать этот класс в другом потоке.
    Это также означает, что исходный список не может быть изменён внутри слушателя, так как это сделает этот объект Change недействительным для всех последующих слушателей.

    Примечание: в случае, если изменение содержит несколько изменений различного типа, эти изменения должны быть в следующем порядке: изменения перестановки, изменения добавления или удаления, изменения обновления Это связано с тем, что изменения перестановки не могут следовать за изменениями добавления/удаления, так как они изменят положение добавленных элементов. А с другой стороны, изменения обновления должны следовать за изменениями добавления/удаления, так как они ссылаются на свои индексы к текущему состоянию списка, что означает с применёнными всеми изменениями добавления/удаления.

    С момента:
    JavaFX 2.0
  • Краткое описание конструкторов

    Конструкторы
    Конструктор Описание
    Change​(ObservableList<E> list)
    Создаёт новый экземпляр Change для данного списка.
  • Краткое описание методов

    Все методыМетоды экземпляровАбстрактные методыКонкретные методы
    Модификатор и тип Метод Описание
    int getAddedSize()
    Возвращает размер интервала, который был добавлен.
    List<E> getAddedSubList()
    Возвращает представление subList списка, содержащее только добавленные элементы.
    abstract int getFrom()
    Если wasAdded() истинно, интервал содержит все значения, которые были добавлены.
    ObservableList<E> getList()
    Исходный список изменений.
    protected abstract int[] getPermutation()
    Если это изменение — перестановка, возвращает целочисленный массив, описывающий перестановку.
    int getPermutation​(int i)
    Этот метод позволяет разработчикам наблюдать за перестановками, произошедшими в этом изменении.
    abstract List<E> getRemoved()
    Неизменяемый список удалённых/заменённых элементов.
    int getRemovedSize()
    Возвращает размер списка getRemoved().
    abstract int getTo()
    Конец интервала изменения.
    abstract boolean next()
    Переходит к следующему изменению.
    abstract void reset()
    Сбрасывает в исходное состояние.
    boolean wasAdded()
    Указывает, были ли элементы добавлены во время этого изменения.
    boolean wasPermutated()
    Указывает, было ли изменение только перестановкой.
    boolean wasRemoved()
    Указывает, были ли элементы удалены во время этого изменения.
    boolean wasReplaced()
    Указывает, были ли элементы заменены во время этого изменения.
    boolean wasUpdated()
    Указывает, что элементы между getFrom() (включительно) и getTo() (исключительно) изменились.
    • Методы, унаследованные от класса java.lang.Object

      clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Подробное описание конструкторов

    • Change

      public Change​(ObservableList<E> list)
      Создаёт новый экземпляр Change на основе заданного списка.
      Параметры:
      list - Изменённый список
  • Подробное описание методов

    • next

      public abstract boolean next()
      Переходит к следующему изменению. Экземпляр Change в начальном состоянии недействителен и требует вызова next() перед вызовом других методов. Первый вызов next() сделает этот объект представителем первого изменения.
      Возвращает:
      true, если переход к следующему изменению выполнен, false — если это последнее изменение.
    • reset

      public abstract void reset()
      Сбрасывает состояние до начального. После этого вызова необходимо вызвать next() перед использованием первого изменения.
    • getList

      public ObservableList<E> getList()
      Исходный список изменений.
      Возвращает:
      изменённый список
    • getFrom

      public abstract int getFrom()
      Если wasAdded() истинно, интервал содержит все добавленные значения. Если wasPermutated() истинно, интервал отмечает переставленные значения. Если wasRemoved() истинно и wasAdded ложно, getFrom() и getTo() должны возвращать одно и то же число — позицию удалённых элементов в списке.
      Возвращает:
      начало (включительно) интервала, относящегося к изменению
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • getTo

      public abstract int getTo()
      Конец интервала изменения.
      Возвращает:
      конец (исключительно) интервала, относящегося к изменению
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
      См. также:
      getFrom()
    • getRemoved

      public abstract List<E> getRemoved()
      Неизменяемый список удалённых/заменённых элементов. Если элементы из списка не удалялись, возвращается пустой список.
      Возвращает:
      список всех удалённых элементов
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • wasPermutated

      public boolean wasPermutated()
      Указывает, было ли изменение только перестановкой.
      Возвращает:
      true, если изменение было только перестановкой
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • wasAdded

      public boolean wasAdded()
      Указывает, были ли добавлены элементы во время этого изменения.
      Возвращает:
      true, если в список что-то было добавлено
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • wasRemoved

      public boolean wasRemoved()
      Указывает, были ли удалены элементы во время этого изменения. Обратите внимание, что использование set также приведёт к изменению, где wasRemoved() возвращает true. См. wasReplaced().
      Возвращает:
      true, если из списка что-то было удалено
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • wasReplaced

      public boolean wasReplaced()
      Указывает, были ли заменены элементы во время этого изменения. Это обычно истинно, когда на список вызывается set. Операция set будет действовать как операция удаления и добавления одновременно.

      Обычно нет необходимости использовать этот метод напрямую. Обработка операции удаления, а затем добавления, как в примере в ListChangeListener.Change документации класса, эффективно обрабатывает операцию set.

      Возвращает:
      то же, что и wasAdded() && wasRemoved()
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • wasUpdated

      public boolean wasUpdated()
      Указывает, что элементы между getFrom() (включительно) и getTo() (исключительно) были изменены. Это единственный необязательный тип события и может не генерироваться всеми ObservableList.
      Возвращает:
      true, если текущее изменение является изменением обновления.
      С тех пор:
      JavaFX 2.1
    • getAddedSubList

      public List<E> getAddedSubList()
      Возвращает представление в виде subList списка, содержащего только добавленные элементы. Это фактически сокращение для c.getList().subList(c.getFrom(), c.getTo());
      
       for (Node n : change.getAddedSubList()) {
             // do something
       }
       
      Возвращает:
      созданное представление sublist, содержащее все добавленные элементы.
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • getRemovedSize

      public int getRemovedSize()
      Возвращает размер списка getRemoved().
      Возвращает:
      количество удалённых элементов
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • getAddedSize

      public int getAddedSize()
      Возвращает размер интервала, который был добавлен.
      Возвращает:
      количество добавленных элементов
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • getPermutation

      protected abstract int[] getPermutation()
      Если это изменение является перестановкой, возвращает целочисленный массив, описывающий перестановку. Этот массив непосредственно отображает предыдущие индексы на новые. Этот метод не доступен для общего использования и поэтому может возвращать массив безопасно. Индекс 0 массива соответствует индексу getFrom() списка. То же самое относится к последнему индексу и getTo(). Метод используется методами wasPermutated() и getPermutation(int).
      Возвращает:
      пустой массив, если это не перестановка, или целочисленный массив, содержащий перестановку
      Исключения:
      IllegalStateException — если экземпляр Change находится в начальном состоянии
    • getPermutation

      public int getPermutation​(int i)
      Этот метод позволяет разработчикам наблюдать за произошедшими перестановками в этом изменении. Чтобы получить новую позицию элемента, необходимо вызвать:
          change.getPermutation(oldIndex);
       
      Примечание: реализация по умолчанию этого метода берёт информацию из метода getPermutation(). Вам не нужно переопределять этот метод.
      Параметры:
      i - старый индекс, содержавший элемент до этого изменения
      Возвращает:
      новый индекс того же элемента
      Исключения:
      IndexOutOfBoundsException - если i выходит за пределы списка
      IllegalStateException - если это не изменение перестановки

© 2008, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from JavaFX API Documentation.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Java, JavaFX and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API