モジュール java.desktop
パッケージ javax.swing.text

クラスZoneView

  • すべての実装されたインタフェース:
    SwingConstants


    public class ZoneView
    extends BoxView
    ZoneViewはViewの実装で、子ビューが表示またはモデルとビューの変換のために必要になるまで生成または格納されないゾーンを生成します。 この機能を使用すると、表されているモデルが非常に大きい場合に、アクティブに表示、編集されている領域だけのビュー・オブジェクトを構築することで、大幅にメモリーの消費を削減できます。 子のサイズは推測することも保存された結果だけで非同期に計算することもできます。

    ZoneViewは子のゾーンを実装するボックスを提供するためにBoxViewを拡張します。 ゾーンはクラスのインスタンスの子という特別なView実装で、ZoneViewのインスタンスがかかわっているモデルの部分だけを表します。 ゾーンは子のビューの表示の試みられるまで子ビューを生成しません。 ボックス型のビューは次の理由により適しています。

    • ボックスは良く使用されるビューで、この動作を提供するボックスによりビュー・ファクトリからビュー階層へ動作をプラグする機会を提供できる。
    • ボックスは一方向に並べられているため、確実な方法で簡単にゾーンに分割できる。
    • 通常、ボックスとモデルの関係は簡単で、ボックスは子の要素を直接表す子ビューを生成する。
    • ボックスはほかの型よりも簡単にサイズを推定できる。

    デフォルトの動作は、maxZoneSizeとmaxZonesLoadedの2つのプロパティが制御しています。 maxZoneSizeをInteger.MAX_VALUEに設定するとゾーンを一つしか生成しないという効果があります。 そのため、ビューを効果的にデコレータ・パターンの実装へ切り替えることができます。 maxZonesLoadedをInteger.MAX_VALUEの値に設定すると、ゾーンのアンロードはできません。 簡単に言うと、ビューがかかわっている要素の子要素が表されている境界に生成されます。 ゾーンは任意のView実装となることができますが、デフォルトの実装はかなり大きなゾーンをサポートしているAsyncBoxViewが基になります。

    導入されたバージョン:
    1.3
    関連項目:
    View
    • コンストラクタの詳細

      • ZoneView

        public ZoneView​(Element elem,
                        int axis)
        ZoneViewを構築します。
        パラメータ:
        elem - このビューが扱う要素
        axis - View.X_AXISまたはView.Y_AXIS
    • メソッドの詳細

      • getMaximumZoneSize

        public int getMaximumZoneSize​()
        現在のゾーン・サイズの最大値を取得します。
        戻り値:
        現在の最大ゾーン・サイズ
      • setMaximumZoneSize

        public void setMaximumZoneSize​(int size)
        望ましい最大ゾーン・サイズを設定します。 ゾーンは子ビューの境界に生成されるため、一つの子ビューがこのサイズより大きい場合は、ゾーンはこのサイズより大きくなる場合があります。
        パラメータ:
        size - ゾーンを小さく分割する前の、ゾーンが表す文字数。
      • getMaxZonesLoaded

        public int getMaxZonesLoaded​()
        同時にロードできるゾーン数の現在の設定を取得します。
        戻り値:
        同時にロード可能なゾーン数の現在の設定
      • setMaxZonesLoaded

        public void setMaxZonesLoaded​(int mzl)
        同時にロードできるゾーン数の現在の設定を設定します。 mzlが1より小さい場合はIllegalArgumentExceptionがスローされます。
        パラメータ:
        mzl - アクティブにロードされる望ましい最大ゾーン数。0より大きい値にする必要がある
        例外:
        IllegalArgumentException - mzlが1より小さい場合
      • zoneWasLoaded

        protected void zoneWasLoaded​(View zone)
        ロードされるとゾーンにより呼び出されます。 これは、アンロード状態にあったゾーンで表示またはモデルの変換、ビューの変換を試みたときに起こります。 これはゾーンが最大数に達したかどうかを判定するために実装されます。最大数に達している場合は、一番古いゾーンをアンロードします。
        パラメータ:
        zone - ロードされたばかりの子ビュー。
      • unloadZone

        protected void unloadZone​(View zone)
        ゾーンを省メモリー状態に変換して、ゾーンをアンロードします。 ゾーンはこのビューが扱う要素の子要素のサブセットを表します。 したがって、デフォルトの実装は単にすべての子を削除します。
        パラメータ:
        zone - アンロード状態に設定するのが望ましい子ビュー。
      • isZoneLoaded

        protected boolean isZoneLoaded​(View zone)
        ゾーンがロード状態にあるかどうかを判定します。 ゾーンはこのビューが扱う要素の子要素のサブセットを表します。 したがって、デフォルトの実装では、ビューに子がある場合はtrueを返します。paramゾーンの子ビュー
        パラメータ:
        zone - ゾーン
        戻り値:
        ゾーンがロードされた状態であるかどうかを示します。
      • createZone

        protected View createZone​(int p0,
                                  int p1)
        このオブジェクトが扱う範囲内にあるモデル内の指定範囲内のゾーンを表すビューを生成します。 このメソッドはゾーン管理ロジックが新しいゾーンを生成することで呼び出されます。 サブクラスはこのメソッドを変更して異なったゾーン実装を提供できます。
        パラメータ:
        p0 - 望ましいゾーンの開始値。 値はgetStartOffset()以上でgetEndOffset()未満であるべきです。 またp1未満でもあるべきです。
        p1 - 望ましいゾーンの終了値。 値はgetStartOffset()よりも大きくgetEndOffset()以下であるべきです。 またp0よりも大きい。
        戻り値:
        モデル内の指定された範囲のゾーンを表すビュー
      • loadChildren

        protected void loadChildren​(ViewFactory f)
        ビューを初期化するためにすべての子をロードします。 これは、setParentメソッドによって呼び出されます。 このメソッドを再実装すると、どの子も(ゾーンによって生成されるので)直接ロードしないようにできます。 このメソッドはゾーンの初期設定を生成します。 ただし、実際にはゾーンの表示またはモデル座標、ビュー座標の変換の試みをするまでゾーンは設定されません。
        オーバーライド:
        loadChildren、クラス: CompositeView
        パラメータ:
        f - ビュー・ファクトリ
        関連項目:
        CompositeView.setParent(javax.swing.text.View)
      • getViewIndexAtPosition

        protected int getViewIndexAtPosition​(int pos)
        モデル内の指定された位置を表す子ビューのインデックスを返します。
        オーバーライド:
        getViewIndexAtPosition、クラス: CompositeView
        パラメータ:
        pos - 位置>= 0
        戻り値:
        指定された位置を表すビューのインデックス。その位置を表すビューがない場合は -1
      • insertUpdate

        public void insertUpdate​(DocumentEvent changes,
                                 Shape a,
                                 ViewFactory f)
        このビューが扱う位置でドキュメントに何かが挿入されたことを通知します。 これはスーパー・クラスに委譲されていますが、再実装して関連ゾーンを更新します。つまり、ゾーンを2つ以上のゾーン・セットに分割する必要があるかどうかを判定します。
        オーバーライド:
        insertUpdate、クラス: View
        パラメータ:
        changes - 関連するドキュメントからの変更情報
        a - ビューの現在の割当て
        f - ビューが子を持つ場合に再構築に使用するファクトリ
        関連項目:
        View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
      • removeUpdate

        public void removeUpdate​(DocumentEvent changes,
                                 Shape a,
                                 ViewFactory f)
        このビューが扱うドキュメント内の位置から何かが削除されたということを通知します。 これはスーパー・クラスに委譲されていますが、再実装して関連ゾーンを更新します。つまり、ゾーンを削除するか、または別のゾーンに結合する必要があるかどうかを判定します。
        オーバーライド:
        removeUpdate、クラス: View
        パラメータ:
        changes - 関連するドキュメントからの変更情報
        a - ビューの現在の割当て
        f - ビューが子を持つ場合に再構築に使用するファクトリ
        関連項目:
        View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)