Класс ListChangeListener.Change<E>
- Type Parameters:
-
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 недействительным для всех последующих слушателей.
Примечание: в случае, если изменение содержит несколько изменений разных типов, эти изменения должны быть в следующем порядке: изменения перестановки, изменения добавления или удаления, изменения обновления . Это связано с тем, что изменения перестановок не могут следовать за изменениями добавления/удаления, так как они изменят положение добавленных элементов. С другой стороны, изменения обновления должны следовать за изменениями добавления/удаления, потому что они ссылаются на свои индексы на текущее состояние списка, что означает с применением всех изменений добавления/удаления.
- Since:
- JavaFX 2.0
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
Change(ObservableList<E> list) | Создаёт новый экземпляр Change для заданного списка. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
int | getAddedSize() | Возвращает размер интервала, который был добавлен. |
List<E> | getAddedSubList() | Возвращает представление подсписка списка, содержащего только добавленные элементы. |
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() |
Подробное описание конструкторов
Изменение
public Change(ObservableList<E> list)
- Параметры:
-
list- Изменённый список
Подробное описание методов
next
public abstract boolean next()
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()
wasRemoved() возвращает true. См. wasReplaced().- Возвращает:
-
trueесли из списка что-то было удалено - Выбрасывает:
-
IllegalStateException- если этот экземпляр Change находится в начальном состоянии
wasReplaced
public boolean wasReplaced()
Обычно нет необходимости использовать этот метод напрямую. Обработка операции удаления, а затем добавления, как в примере в ListChangeListener.Change классе javadoc, эффективно обрабатывает операцию set.
- Возвращает:
- то же, что и
wasAdded() && wasRemoved() - Выбрасывает:
-
IllegalStateException- если этот экземпляр Change находится в начальном состоянии
wasUpdated
public boolean wasUpdated()
getFrom() (включительно) и getTo() (исключительно) были изменены. Это единственный необязательный тип события и может не генерироваться всеми ObservableLists.- Возвращает:
-
trueесли текущее изменение — это изменение обновления - С тех пор:
- JavaFX 2.1
getAddedSubList
public List<E> getAddedSubList()
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()
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.