モジュール 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(int initialLength)
    指定された初期サイズで新しいGapContentオブジェクトを生成します。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    protected Object
    allocateArray(int len)
    項目を格納するための適切な型の配列を割り当てます。配列の型は、サブクラスで決定します。
    createPosition(int offset)
    コンテンツが変更されたときに変更を追跡するコンテンツ内の位置を作成します。
    protected final Object
    配列にアクセスします。
    protected int
    割り当てられた配列の長さを取得します。
    void
    getChars(int where, int len, Segment chars)
    コンテンツの一部を取り出します。
    protected final int
    ギャップの終端にアクセスします。
    protected final int
    ギャップの先頭にアクセスします。
    protected Vector
    getPositionsInRange(Vector v, int offset, int length)
    offsetからoffset+lengthの範囲にある位置に対応するUndoPosRefのインスタンスを含むベクターを返します。
    getString(int where, int len)
    コンテンツの一部を取り出します。
    insertString(int where, String str)
    コンテンツに文字列を挿入します。
    int
    コンテンツの長さを返します。
    remove(int where, int nitems)
    コンテンツの一部を削除します。
    protected void
    replace(int position, int rmSize, Object addItems, int addSize)
    指定されたストレージ内の論理的位置を、指定された新規項目に置き換えます。
    protected void
    オフセットが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で宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • コンストラクタの詳細

    • GapContent

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

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

    • allocateArray

      protected Object allocateArray(int len)
      項目を格納するための適切な型の配列を割り当てます。配列の型は、サブクラスで決定します。
      パラメータ:
      len - 配列の長さ
      戻り値:
      ある型のjava配列
    • getArrayLength

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

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

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

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

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

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

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

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

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

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

      protected void shiftGapEndUp(int newGapEnd)
      ギャップの終端を上方に調節します。 この操作では、データは移動されませんが、境界の変更によって影響を受けるすべてのマークが更新されます。 古いギャップの終了位置と新しいギャップの終了位置の間にあるすべてのマークは、ギャップの終端に押し込まれ、それらの位置は削除されます。
      パラメータ:
      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()
      配列にアクセスします。 配列の実際の型は、サブクラスによってのみ認識されます。
      戻り値:
      ある型のjava配列
    • 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 - ストレージ内に配置する新規項目。
      addSize - 追加するアイテムの数