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.