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
getArray()
配列にアクセスします。protected int
割り当てられた配列の長さを取得します。void
コンテンツの一部を取り出します。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
length()
コンテンツの長さを返します。remove
(int where, int nitems) コンテンツの一部を削除します。protected void
指定されたストレージ内の論理的位置を、指定された新規項目に置き換えます。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インスタンスの位置をリセットします。
-
コンストラクタの詳細
-
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
- 開始位置>= 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
offset
からoffset
+length
の範囲にある位置に対応するUndoPosRefのインスタンスを含むベクターを返します。v
がnullではない場合、一致する位置がそこに配置されます。 結果として得られる位置を持つベクターが返されます。- パラメータ:
v
- 使用するベクター。nullの場合は新しいベクターが作成されるoffset
- 開始オフセット>= 0length
- 長さ>= 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
- 追加するアイテムの数
-