E - リスト要素の型public abstract static class ListChangeListener.Change<E> extends Object
next()メソッドで繰り返す必要があります。 各変更は、次のいずれかである必要があります。
wasPermutated()はtrueを返します。 順列はfrom (これを含む)からto (これを含まない)の範囲で実行され、getPermutation(int)メソッドを呼び出して問い合せることができます。
wasAdded()またはwasRemoved()のいずれかがtrueを返します。 両方のメソッドがtrueを返す場合、wasReplaced()もtrueを返します。
getRemoved()メソッドは、リスト内で置換または削除された要素のリストを返します。
from (これを含む)からto (これを含まない)の範囲は、新しい要素を含むリストのサブリストを示します。 これは半開区間であるため、要素が追加されなかった場合、getFrom()はgetTo()と同等になることに注意してください。
getAddedSubList()を呼び出すことで、追加された要素のリストを取得できます。
追加/削除の変更別に正しい索引を保持するには、これらの変更をそのfrom索引でソートする必要があります。
wasUpdated()は更新の変更時にtrueを返します。 from (これを含む)からto (これを含まない)の範囲のすべての要素が更新されました。
Changeの他のメソッドを呼び出す前にnext()メソッドを呼び出す必要があります。 reset()の呼出し後に同様に適用されます。 常に機能するメソッドはgetList()のみです。
一般的な使用方法は、リスナーをフックまたはフック解除(または追加または削除)するために、またはObservableListの各要素の不変条件を保持するためにそのObservableListの変更を監視することです。 これを実行する一般的なコード・パターンは次のようになります。
ObservableList- theList = ...; theList.addListener(new ListChangeListener<Item>() { public void onChanged(Change<tem> 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オブジェクトが無効になるため、リスナー内でソース・リストの変更ができないことを意味します。
ノート: 変更に異なるタイプの変更が複数含まれている場合、これらの変更は次の順序で行う必要があります。順列変更、追加変更または削除変更、更新変更。これは、順列変更により、追加された要素の位置が変更されるため、追加/削除変更の後に順列変更を行うことができないからです。 一方、更新変更はその索引を使用してリストの現在の状態(すべての追加/削除変更が適用されている)を参照するため、追加/削除変更の後に行う必要があります。
| コンストラクタと説明 |
|---|
Change(ObservableList<E> list)
リストに対して行われる新しい変更を構築します。
|
| 修飾子と型 | メソッドと説明 |
|---|---|
int |
getAddedSize()
追加された区間のサイズ。
|
List<E> |
getAddedSubList()
追加された要素のみを含むリストのsubListビューを取得するには、getAddedSubList()メソッドを使用します。
|
abstract int |
getFrom()
wasAddedがtrueの場合、区間には追加されたすべての値が含まれます。
|
ObservableList<E> |
getList()
変更のソース・リスト。
|
protected abstract int[] |
getPermutation()
この変更が順列である場合、順列を説明するinteger型配列を返します。
|
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() (これを含まない)の間の要素が変更されたことを示します。
|
public Change(ObservableList<E> list)
list - 変更されたリストpublic abstract boolean next()
public abstract void reset()
public ObservableList<E> getList()
public abstract int getFrom()
IllegalStateException - このChangeが初期状態の場合public abstract int getTo()
IllegalStateException - このChangeが初期状態の場合getFrom()public abstract List<E> getRemoved()
IllegalStateException - このChangeが初期状態の場合public boolean wasPermutated()
IllegalStateException - このChangeが初期状態の場合public boolean wasAdded()
IllegalStateException - このChangeが初期状態の場合public boolean wasRemoved()
wasReplaced()」を参照してください。 IllegalStateException - このChangeが初期状態の場合public boolean wasReplaced()
通常、このメソッドを直接使用する必要はありません。 削除操作の後に追加操作を処理すると、前述の例のとおり、設定操作も効率的に処理されます。
wasAdded() && wasRemoved()と同じIllegalStateException - このChangeが初期状態の場合public boolean wasUpdated()
public List<E> getAddedSubList()
c.getList().subList(c.getFrom(), c.getTo());を省略しています
for (Node n : change.getAddedSubList()) {
// do something
}
IllegalStateException - このChangeが初期状態の場合public int getRemovedSize()
IllegalStateException - このChangeが初期状態の場合public int getAddedSize()
IllegalStateException - このChangeが初期状態の場合protected abstract int[] getPermutation()
getFrom()に対応します。 同様に、最後の索引はgetTo()に対応します。 このメソッドは、wasPermutated()メソッドおよびgetPermutation(int)メソッドによって使用されます。 IllegalStateException - このChangeが初期状態の場合public int getPermutation(int i)
change.getPermutation(oldIndex);
ノート: このメソッドのデフォルト実装は、getPermutation()メソッドから情報を取得します。 このメソッドをオーバーライドする必要はありません。 i - この変更より前の要素を含んでいた古い索引IndexOutOfBoundsException - iがリストの範囲外の場合IllegalStateException - これが順列変更でない場合Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.