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

クラスGapContent

java.lang.Object
javax.swing.text.GapContent
すべての実装されたインタフェース:
Serializable, AbstractDocument.Content

public class GapContent
extends Object
implements AbstractDocument.Content, Serializable
emacsが使うものと類似したギャップ付きバッファを使って実装されたAbstractDocument.Contentインタフェースの実装です。 記憶される内容は、どこかにギャップを持つUnicode文字列の配列です。 ギャップは変更の位置に移動されるので、ほとんどの変更が同じ位置にある場所で、共通の動作を利用できるようになります。 ギャップ境界で生じる変更は一般的に簡単なものなので、配列の内容を直接移動して変更を適用するよりもギャップを移動する方が手間がかかりません。

また、変更を追跡する位置を管理するのも一般的に簡単です。 位置の実装(マーク)は配列インデックスを格納し、現在のギャップ位置から逐次位置を簡単に計算できます。 変更ではギャップの移動時に新旧ギャップ境界間のマークに対する更新を必要とするだけなので、マークの更新は一般に非常に手軽です。 マークはソートされた状態で格納されるので、2等分探索ですばやく見つけられます。 これはマークを追加する手間を増大させる一方で、マークの更新を維持する手間を減らします。

  • コンストラクタのサマリー

    コンストラクタ 
    コンストラクタ 説明
    GapContent()
    新しいGapContentオブジェクトを作成します。
    GapContent​(int initialLength)
    指定された初期サイズで新しいGapContentオブジェクトを生成します。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    protected Object allocateArray​(int len)
    項目を格納するための適切な型の配列を割り当てます。配列の型は、サブクラスで決定します。
    Position createPosition​(int offset)
    コンテンツが変更されたときに変更を追跡するコンテンツ内の位置を作成します。
    protected Object getArray()
    配列にアクセスします。
    protected int getArrayLength()
    割り当てられた配列の長さを取得します。
    void getChars​(int where, int len, Segment chars)
    コンテンツの一部を取り出します。
    protected int getGapEnd()
    ギャップの終端にアクセスします。
    protected int getGapStart()
    ギャップの先頭にアクセスします。
    protected Vector getPositionsInRange​(Vector v, int offset, int length)
    offsetからoffset+lengthの範囲にある位置に対応するUndoPosRefのインスタンスを含むベクターを返します。
    String getString​(int where, int len)
    コンテンツの一部を取り出します。
    UndoableEdit insertString​(int where, String str)
    コンテンツに文字列を挿入します。
    int length()
    コンテンツの長さを返します。
    UndoableEdit remove​(int where, int nitems)
    コンテンツの一部を削除します。
    protected void replace​(int position, int rmSize, Object addItems, int addSize)
    指定されたストレージ内の論理的位置を、指定された新規項目に置き換えます。
    protected void resetMarksAtZero()
    オフセットが0のマークをすべてリセットして、インデックスも0になるようにします。
    protected void shiftEnd​(int newSize)
    ギャップを拡大し、これにより、必要なデータを移動して適切なマークを更新します。
    protected void shiftGap​(int newGapStart)
    ギャップの開始位置を新しい位置に移動しますが、ギャップのサイズは変更しません。
    protected void shiftGapEndUp​(int newGapEnd)
    ギャップの終端を上方に調節します。
    protected void shiftGapStartDown​(int newGapStart)
    ギャップの終端を下方に調節します。
    protected void updateUndoPositions​(Vector positions, int offset, int length)
    positionsのすべてのUndoPosRefインスタンスの位置をリセットします。

    クラス java.lang.Objectで宣言されたメソッド

    cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait
  • コンストラクタの詳細

    • GapContent

      public GapContent()
      新しいGapContentオブジェクトを作成します。 初期サイズのデフォルトは10です。
    • GapContent

      public GapContent​(int initialLength)
      指定された初期サイズで新しいGapContentオブジェクトを生成します。 初期サイズは、暗黙のブレークとギャップの余地を持たせるため、2以上の値にする必要があります。
      パラメータ:
      initialLength - 初期サイズ
  • メソッドの詳細

    • allocateArray

      protected Object allocateArray​(int len)
      項目を格納するための適切な型の配列を割り当てます。配列の型は、サブクラスで決定します。
    • getArrayLength

      protected int getArrayLength()
      割り当てられた配列の長さを取得します。
    • length

      public int length()
      コンテンツの長さを返します。
      定義:
      length、インタフェース: AbstractDocument.Content
      戻り値:
      長さ>= 1
      関連項目:
      AbstractDocument.Content.length()
    • insertString

      public UndoableEdit insertString​(int where, String str) throws BadLocationException
      コンテンツに文字列を挿入します。
      定義:
      insertString、インタフェース: AbstractDocument.Content
      パラメータ:
      where - 開始位置。0以上で、length()より小さい
      str - 挿入するnull以外の文字列
      戻り値:
      元に戻すためのUndoableEditオブジェクト
      例外:
      BadLocationException - 指定された位置が無効な場合
      関連項目:
      AbstractDocument.Content.insertString(int, java.lang.String)
    • remove

      public UndoableEdit remove​(int where, int nitems) throws BadLocationException
      コンテンツの一部を削除します。
      定義:
      remove、インタフェース: AbstractDocument.Content
      パラメータ:
      where - 開始位置。0以上で、where + nitemsがlength()より小さい
      nitems - 削除対象の文字数>= 0
      戻り値:
      元に戻すためのUndoableEditオブジェクト
      例外:
      BadLocationException - 指定された位置が無効な場合
      関連項目:
      AbstractDocument.Content.remove(int, int)
    • getString

      public String getString​(int where, int len) throws BadLocationException
      コンテンツの一部を取り出します。
      定義:
      getString、インタフェース: AbstractDocument.Content
      パラメータ:
      where - 開始位置>= 0
      len - 取り出す長さ>= 0
      戻り値:
      コンテンツを表す文字列
      例外:
      BadLocationException - 指定された位置が無効な場合
      関連項目:
      AbstractDocument.Content.getString(int, int)
    • getChars

      public void getChars​(int where, int len, Segment chars) throws BadLocationException
      コンテンツの一部を取り出します。 必要なコンテンツがギャップをまたいでいる場合、コンテンツをコピーします。 必要なコンテンツがギャップをまたいでいない場合、コピーは連続しているものなので、実際の格納内容を返してコピーを避けます。
      定義:
      getChars、インタフェース: AbstractDocument.Content
      パラメータ:
      where - 開始位置。0以上で、where + lenがlength()以下
      len - 取得対象の文字数>= 0
      chars - 文字を返す先のSegmentオブジェクト
      例外:
      BadLocationException - 指定された位置が無効な場合
      関連項目:
      AbstractDocument.Content.getChars(int, int, javax.swing.text.Segment)
    • createPosition

      public Position createPosition​(int offset) throws BadLocationException
      コンテンツが変更されたときに変更を追跡するコンテンツ内の位置を作成します。
      定義:
      createPosition、インタフェース: AbstractDocument.Content
      パラメータ:
      offset - 追跡対象のオフセット>= 0
      戻り値:
      位置
      例外:
      BadLocationException - 指定された位置が無効な場合
    • shiftEnd

      protected void shiftEnd​(int newSize)
      ギャップを拡大し、これにより、必要なデータを移動して適切なマークを更新します。
    • shiftGap

      protected void shiftGap​(int newGapStart)
      ギャップの開始位置を新しい位置に移動しますが、ギャップのサイズは変更しません。 これによって、配列内のデータは移動され、マークは更新されます。
    • resetMarksAtZero

      protected void resetMarksAtZero()
      オフセットが0のマークをすべてリセットして、インデックスも0になるようにします。
    • shiftGapStartDown

      protected void shiftGapStartDown​(int newGapStart)
      ギャップの終端を下方に調節します。 この操作では、データは移動されませんが、境界の変更によって影響を受けるすべてのマークが更新されます。 古いギャップの開始位置と新しいギャップの開始位置の間にあるすべてのマークは、ギャップの終端に押し込まれ、それらの位置は削除されます。
    • shiftGapEndUp

      protected void shiftGapEndUp​(int newGapEnd)
      ギャップの終端を上方に調節します。 この操作では、データは移動されませんが、境界の変更によって影響を受けるすべてのマークが更新されます。 古いギャップの終了位置と新しいギャップの終了位置の間にあるすべてのマークは、ギャップの終端に押し込まれ、それらの位置は削除されます。
    • getPositionsInRange

      protected Vector getPositionsInRange​(Vector v, int offset, int length)
      offsetからoffset+lengthの範囲にある位置に対応するUndoPosRefのインスタンスを含むベクターを返します。 vがnullではない場合、一致する位置がそこに配置されます。 結果として得られる位置を持つベクターが返されます。
      パラメータ:
      v - 使用するベクター。nullの場合は新しいベクターが作成される
      offset - 開始オフセット>= 0
      length - 長さ>= 0
      戻り値:
      インスタンスのセット
    • updateUndoPositions

      protected void updateUndoPositions​(Vector positions, int offset, int length)
      positionsのすべてのUndoPosRefインスタンスの位置をリセットします。

      これは内部での使用を目的としていて、一般にはサブクラスを対象にしていません。

      パラメータ:
      positions - リセット対象のUndoPosRefのインスタンス
      offset - 文字列が挿入された場所
      length - 挿入された文字列の長さ
    • getArray

      protected final Object getArray()
      配列にアクセスします。 配列の実際の型は、サブクラスによってのみ認識されます。
    • getGapStart

      protected final int getGapStart()
      ギャップの先頭にアクセスします。
    • getGapEnd

      protected final int getGapEnd()
      ギャップの終端にアクセスします。
    • replace

      protected void replace​(int position, int rmSize, Object addItems, int addSize)
      指定されたストレージ内の論理的位置を、指定された新規項目に置き換えます。 ギャップが変更場所に現在配置されていない場合、ギャップは変更される領域に移動します。
      パラメータ:
      position - 置換えを行う位置。 これは基になるストレージ配列内の位置ではなく、モデル化される連続するスペース内の位置です。
      rmSize - 削除する項目の数
      addItems - ストレージ内に配置する新規項目。