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 ObjectallocateArray(int len) 項目を格納するための適切な型の配列を割り当てます。配列の型は、サブクラスで決定します。createPosition(int offset) コンテンツが変更されたときに変更を追跡するコンテンツ内の位置を作成します。protected final ObjectgetArray()配列にアクセスします。protected int割り当てられた配列の長さを取得します。voidコンテンツの一部を取り出します。protected final intギャップの終端にアクセスします。protected final intギャップの先頭にアクセスします。protected VectorgetPositionsInRange(Vector v, int offset, int length) offsetからoffset+lengthの範囲にある位置に対応するUndoPosRefのインスタンスを含むベクターを返します。getString(int where, int len) コンテンツの一部を取り出します。insertString(int where, String str) コンテンツに文字列を挿入します。intlength()コンテンツの長さを返します。remove(int where, int nitems) コンテンツの一部を削除します。protected void指定されたストレージ内の論理的位置を、指定された新規項目に置き換えます。protected voidオフセットが0のマークをすべてリセットして、インデックスも0になるようにします。protected voidshiftEnd(int newSize) ギャップを拡大し、これにより、必要なデータを移動して適切なマークを更新します。protected voidshiftGap(int newGapStart) ギャップの開始位置を新しい位置に移動しますが、ギャップのサイズは変更しません。protected voidshiftGapEndUp(int newGapEnd) ギャップの終端を上方に調節します。protected voidshiftGapStartDown(int newGapStart) ギャップの終端を下方に調節します。protected voidupdateUndoPositions(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) 項目を格納するための適切な型の配列を割り当てます。配列の型は、サブクラスで決定します。- パラメータ:
len- 配列の長さ- 戻り値:
- ある型のjava配列
-
getArrayLength
protected int getArrayLength()割り当てられた配列の長さを取得します。- 戻り値:
- 配列の長さ
-
length
-
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- 開始位置>= 0len- 取り出す長さ>= 0- 戻り値:
- コンテンツを表す文字列
- 例外:
BadLocationException- 指定された位置が無効な場合- 関連項目:
-
getChars
public void getChars(int where, int len, Segment chars) throws BadLocationException コンテンツの一部を取り出します。 必要なコンテンツがギャップをまたいでいる場合、コンテンツをコピーします。 必要なコンテンツがギャップをまたいでいない場合、コピーは連続しているものなので、実際の格納内容を返してコピーを避けます。- 定義:
getChars、インタフェースAbstractDocument.Content- パラメータ:
where- 開始位置。0以上で、where + lenがlength()以下len- 取得対象の文字数>= 0chars- 文字を返す先の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
-
updateUndoPositions
protected void updateUndoPositions(Vector positions, int offset, int length) positionsのすべてのUndoPosRefインスタンスの位置をリセットします。これは内部での使用を目的としていて、一般にはサブクラスを対象にしていません。
- パラメータ:
positions- リセット対象のUndoPosRefのインスタンスoffset- 文字列が挿入された場所length- 挿入された文字列の長さ
-
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- ストレージ内に配置する新規項目。addSize- 追加するアイテムの数
-