モジュール 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
    • updateChildren

      protected boolean updateChildren​(DocumentEvent.ElementChange ec, DocumentEvent e, ViewFactory f)
      スーパー・クラスの動作により、子ビューの更新が試みられます。ただし、子はゾーンであり、関連する要素の変更の影響を直接受けないため、この動作は適切ではありません。 これを再実装しても何も行われず、falseを返します。
      オーバーライド:
      updateChildren、クラス: View
      パラメータ:
      ec - このビューが扱う要素への変更情報。 このメソッドが呼び出される場合はnullにはならない
      e - 関連するドキュメントからの変更情報
      f - 子ビューの構築に使用するファクトリ
      戻り値:
      このビューが扱う要素の子要素を、子ビューが表すかどうか。 一部のビューでは扱う要素の一部を表す子を作成し、falseが返される。 この情報は、追加された要素の範囲のビューが転送されるかどうかを指定するのに使用される
      関連項目:
      View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory), View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory), View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
    • 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)