モジュール java.desktop
パッケージ 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インスタンスの位置をリセットします。
    • コンストラクタの詳細

      • GapContent

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

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

      • allocateArray

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

        protected int getArrayLength()
        割り当てられた配列の長さを取得します。
      • 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)
      • 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 - ストレージ内に配置する新規項目。