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

クラスListChangeListener.Change<E>

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


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

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

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

      コンストラクタ 
      コンストラクタ 説明
      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() (これを含まない)の間の要素が変更されたことを示します。
    • コンストラクタの詳細

      • Change

        public Change​(ObservableList<E> list)
        リストに対して行われる新しい変更を構築します。
        パラメータ:
        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​()
        変更区間の最後。
        戻り値:
        変更に関連する区間の最後(これを含まない)。
        例外:
        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​()
        この変更中に要素が削除されたかどうかを示します。 セットを使用すると、trueを返すwasRemoved()を使用した変更も作成されることに注意してください。 wasReplaced()」を参照してください。
        戻り値:
        リストから削除された場合はtrue
        例外:
        IllegalStateException - このChangeが初期状態の場合
      • wasReplaced

        public boolean wasReplaced​()
        この変更中に要素が置換されたかどうかを示します。 リストでセットが呼び出された場合、これは通常trueです。 設定操作は削除操作や追加操作のようにも機能します。

        通常、このメソッドを直接使用する必要はありません。 上記のListChangeListener.Changeの例のように、remove操作を処理してadd操作を実行すると、set操作も効果的に処理されます。

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

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

        public List<E> getAddedSubList​()
        追加された要素のみを含むリストのsubListビューを取得するには、getAddedSubList()メソッドを使用します。 これは実際には、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​()
        この変更が順列である場合、順列を説明するinteger型配列を返します。 この配列は、前の索引から新しい索引に直接マップします。 このメソッドはパブリックからアクセスできないため、配列を安全に返すことができます。 配列の索引0は、リストの索引getFrom()に対応します。 同様に、最後の索引はgetTo()に対応します。 このメソッドは、wasPermutated()メソッドおよびgetPermutation(int)メソッドによって使用されます。
        戻り値:
        これが順列でない、または順列を含むinteger型配列の場合は空の配列
        例外:
        IllegalStateException - このChangeが初期状態の場合
      • getPermutation

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