Change
| Modifier and Type | Class and Description |
|---|---|
| public abstract static class | ListChangeListener.
the list element type E>Represents a report of changes done to an |
| Modifier and Type | Method and Description |
|---|---|
| public void | onChanged(ListChangeListener.
an object representing the change that was done cCalled after a change has been made to an ObservableList. |
| onChanged | back to summary |
|---|---|
| public void onChanged(ListChangeListener. Called after a change has been made to an ObservableList.
| |
ObservableList. The change may consist of one or more actual
changes and must be iterated by calling the next() method.
Each change must be one of the following:
wasPermutated() returns true in this case.
The permutation happened at range between from (inclusive) and to (exclusive) and
can be queried by calling getPermutation(int) method.
wasAdded(), wasRemoved() returns true.
If both methods return true, wasReplaced() will also return true.
The getRemoved() method returns a list of elements that have been
replaced or removed from the list.
The range between from (inclusive) and to (exclusive)
denotes the sublist of the list that contain new elements. Note that this is a half-open
interval, so if no elements were added, getFrom() is equal to getTo().
It is possible to get a list of added elements by calling getAddedSubList().
Note that in order to maintain correct indexes of the separate add/remove changes, these changes
must be sorted by their from index.
wasUpdated() return true on an update change.
All elements between from (inclusive) and to (exclusive) were updated.
next() method before calling
any other method of Change. The same applies after calling reset().
The only methods that works at any time is getList().
Typical usage is to observe changes on an ObservableList in order
to hook or unhook (or add or remove a listener) or in order to maintain
some invariant on every element in that ObservableList. A common code
pattern for doing this looks something like the following:
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);
}
}
}
});
}Warning
This class directly accesses the source list to acquire information about the changes.
This effectively makes the Change object invalid when another change occurs on the list.
For this reason it is not safe to use this class on a different thread.
It also means the source list cannot be modified inside the listener since that would invalidate this Change object
for all subsequent listeners.
Note
in case the change contains multiple changes of different type, these changes must be in the following order: permutation change(s), add or remove changes, update changes This is because permutation changes cannot go after add/remove changes as they would change the position of added elements. And on the other hand, update changes must go after add/remove changes because they refer with their indexes to the current state of the list, which means with all add/remove changes applied.
| Modifier and Type | Field and Description |
|---|---|
| private final ObservableList |
| Access | Constructor and Description |
|---|---|
| public | Change(ObservableList<E>
The list that was changed list)Constructs a new Change instance on the given list. |
| Modifier and Type | Method and Description |
|---|---|
| public int | |
| public List | Returns: the newly created sublist view that contains all the added elementsReturns a subList view of the list that contains only the elements added. |
| public abstract int | Returns: a beginning (inclusive) of an interval related to the changeIf |
| public ObservableList | |
| protected abstract int[] | Returns: empty array if this is not permutation or an integer array containing the permutationIf this change is a permutation, it returns an integer array that describes the permutation. |
| public int | Returns: the new index of the same elementthe old index that contained the element prior to this change i)This method allows developers to observe the permutations that occurred in this change. |
| public abstract List | Returns: a list with all the removed elementsAn immutable list of removed/replaced elements. |
| public int | |
| public abstract int | Returns: an end (exclusive) of an interval related to the changeThe end of the change interval. |
| public abstract boolean | Returns: true if switched to the next change, false if this is the last changeGoes to the next change. |
| public abstract void | |
| public boolean | Returns: true if something was added to the listIndicates if elements were added during this change. |
| public boolean | Returns: true if the change was just a permutationIndicates if the change was only a permutation. |
| public boolean | Returns: true if something was removed from the listIndicates if elements were removed during this change. |
| public boolean | Returns: same aswasAdded() && wasRemoved()Indicates if elements were replaced during this change. |
| public boolean | Returns: true if the current change is an update changeIndicates that the elements between |
| list | back to summary |
|---|---|
| private final ObservableList<E> list | |
| Change | back to summary |
|---|---|
| public Change(ObservableList<E> list) Constructs a new Change instance on the given list.
| |
| getAddedSize | back to summary |
|---|---|
| public int getAddedSize() Returns the size of the interval that was added.
| |
| getAddedSubList | back to summary |
|---|---|
| public List Returns a subList view of the list that contains only the elements added. This is actually a shortcut to
| |
| getFrom | back to summary |
|---|---|
| public abstract int getFrom() If
| |
| getList | back to summary |
|---|---|
| public ObservableList The source list of the change.
| |
| getPermutation | back to summary |
|---|---|
| protected abstract int[] getPermutation() If this change is a permutation, it returns an integer array
that describes the permutation.
This array maps directly from the previous indexes to the new ones.
This method is not publicly accessible and therefore can return an array safely.
The 0 index of the array corresponds to index
| |
| getPermutation | back to summary |
|---|---|
| public int getPermutation(int i) This method allows developers to observe the permutations that occurred in this change. In order to get the new position of an element, you must call: change.getPermutation(oldIndex);Note: default implementation of this method takes the information from getPermutation() method. You don't have to override this method.
| |
| getRemoved | back to summary |
|---|---|
| public abstract List An immutable list of removed/replaced elements. If no elements were removed from the list, an empty list is returned.
| |
| getRemovedSize | back to summary |
|---|---|
| public int getRemovedSize() Returns the size of
| |
| getTo | back to summary |
|---|---|
| public abstract int getTo() The end of the change interval.
| |
| next | back to summary |
|---|---|
| public abstract boolean next() Goes to the next change.
The Change instance, in its initial state, is invalid and requires a call to
| |
| reset | back to summary |
|---|---|
| public abstract void reset() Resets to the initial stage. After this call, | |
| wasAdded | back to summary |
|---|---|
| public boolean wasAdded() Indicates if elements were added during this change.
| |
| wasPermutated | back to summary |
|---|---|
| public boolean wasPermutated() Indicates if the change was only a permutation.
| |
| wasRemoved | back to summary |
|---|---|
| public boolean wasRemoved() Indicates if elements were removed during this change.
Note that using set will also produce a change with
| |
| wasReplaced | back to summary |
|---|---|
| public boolean wasReplaced() Indicates if elements were replaced during this change. This is usually true when set is called on the list. Set operation will act like remove and add operation at the same time.
Usually, it's not necessary to use this method directly.
Handling remove operation and then add operation, as in the example in
the
| |
| wasUpdated | back to summary |
|---|---|
| public boolean wasUpdated() Indicates that the elements between
| |