Spec-Zone.ru › OpenJavaFX 24

Класс ListChangeListener.Change<E>

java.lang.Object
javafx.collections.ListChangeListener.Change<E>
Type Parameters:
E - тип элемента списка
Enclosing interface:
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 недействительным для всех последующих слушателей.

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

Since:
JavaFX 2.0

Краткое описание конструкторов

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

Краткое описание методов

Модификатор и тип Метод Описание
int getAddedSize()
Возвращает размер интервала, который был добавлен.
List<E> getAddedSubList()
Возвращает представление subList списка, содержащего только добавленные элементы.
abstract int getFrom()
Если wasAdded() true, интервал содержит все значения, которые были добавлены.
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

Подробное описание конструкторов

Изменение

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 классе javadoc, эффективно обработает операцию set.

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

wasUpdated

public boolean wasUpdated()
Указывает, что элементы между getFrom() (включительно) и getTo() (исключительно) были изменены. Это единственный необязательный тип события и может не генерироваться всеми ObservableList.
Возвращает:
true, если текущее изменение является изменением обновления
C момента:
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 - если это не изменение перестановки

Отправить отчёт об ошибке или предложить улучшение
Copyright © 2008, 2025, Oracle и/или его филиалы. Все права защищены.

© 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