モジュール javafx.base
パッケージ javafx.collections

クラスListChangeListener.Change<E>

  • 型パラメータ:
    E - リスト要素の型
    含まれているインタフェース:
    ListChangeListener<E>

    public abstract static class ListChangeListener.Change<E>
    extends Object
    ObservableListに対して行われた変更のレポートを表します。 変更は1つ以上の実際の変更で構成され、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<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オブジェクトが無効になるため、リスナー内でソース・リストの変更ができないことを意味します。

    注意: 変更に異なるタイプの変更が複数含まれている場合、これらの変更は次の順序で行う必要があります。順列変更、追加変更または削除変更、更新変更。これは、順列変更により、追加された要素の位置が変更されるため、追加/削除変更の後に順列変更を行うことができないからです。 一方、更新変更はその索引を使用してリストの現在の状態(すべての追加/削除変更が適用されている)を参照するため、追加/削除変更の後に行う必要があります。

    導入されたバージョン:
    JavaFX 2.0
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      Change​(ObservableList<E> list)
      指定されたリストの新しいChangeインスタンスを構築します。
    • コンストラクタの詳細

      • Change

        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()がtrueの場合、間隔には追加されたすべての値が含まれます。 wasPermutated()がtrueの場合、間隔は置換された値をマークします。 wasRemoved()がtrueで、wasAddedがfalseの場合、getFrom()getTo()は同じ番号を返します。 - 削除された要素がリストに配置された位置。
        戻り値:
        変更に関連する区間の最初(これを含む)
        例外:
        IllegalStateException - このChangeインスタンスが初期状態の場合
      • getTo

        public abstract int getTo()
        変更区間の最後。
        戻り値:
        その変更に関連する区間の終わりの(exclusive)です。
        例外:
        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()
        この変更中に要素が置換されたかどうかを示します。 リストでセットが呼び出された場合、これは通常trueです。 設定操作は削除操作や追加操作のようにも機能します。

        通常、このメソッドを直接使用する必要はありません。 ListChangeListener.Changeクラスのjavadocの例のように、remove操作を処理して操作を追加すると、set操作が効果的に処理されます。

        戻り値:
        wasAdded() && wasRemoved()と同じ
        例外:
        IllegalStateException - このChangeインスタンスが初期状態の場合
      • wasUpdated

        public boolean wasUpdated()
        getFrom() (inclusive)とgetTo() exclusiveとの間の要素が変更されたことを示します。 これは、唯一のオプションのイベント・タイプです。すべてのObservableListsで起動することはできません。
        戻り値:
        現在の変更が更新変更である場合はtrue。
        導入されたバージョン:
        JavaFX 2.1
      • getAddedSubList

        public List<E> getAddedSubList()
        追加された要素のみを含むリストのsubListビューを返します。 これは実際には、c.getList().subList(c.getFrom(), c.getTo());を省略しています
        
         for (Node n : change.getAddedSubList()) {
               // do something
         }
         
        戻り値:
        追加されたすべての要素を含む、新しく作成されたサブリスト・ビュー。
        例外:
        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)メソッドによって使用されます。
        戻り値:
        これが順列でない、または順列を含むinteger型配列の場合は空の配列
        例外:
        IllegalStateException - このChangeインスタンスが初期状態の場合
      • getPermutation

        public int getPermutation​(int i)
        このメソッドでは、開発者はこの変更で発生した順列を観察することができます。 要素の新しい位置を取得するには、次を呼び出す必要があります。
            change.getPermutation(oldIndex);
         
        注意: このメソッドのデフォルト実装は、getPermutation()メソッドから情報を取得します。 このメソッドをオーバーライドする必要はありません。
        パラメータ:
        i - この変更より前の要素を含んでいた古い索引
        戻り値:
        同じ要素の新しい索引
        例外:
        IndexOutOfBoundsException - iがリストの範囲外の場合
        IllegalStateException - これが順列変更でない場合