- java.lang.Object
-
- javax.swing.text.GapContent
-
- 实现的所有接口
-
Serializable,AbstractDocument.Content
public class GapContent extends Object implements AbstractDocument.Content, Serializable
使用类似于emacs使用的间隙缓冲区实现的AbstractDocument.Content接口的实现。 底层存储是一个unicode字符数组,在某处有间隙。 差距被移动到更改位置,以利用大多数更改位于同一位置的常见行为。 在间隙边界处发生的变化通常是便宜的,并且移动间隙通常比直接移动阵列内容以适应变化更便宜。跟踪变化的位置通常也很便宜。 位置实现(标记)存储数组索引,可以轻松地从当前间隙位置计算顺序位置。 当间隙移动时,更改仅需要更新新旧间隙边界之间的标记,因此通常更新标记非常便宜。 标记存储已排序,因此可以使用二进制搜索快速定位它们。 这增加了添加标记的成本,并降低了保持标记更新的成本。
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 构造器 描述 GapContent()创建一个新的GapContent对象。GapContent(int initialLength)创建一个新的GapContent对象,并指定初始大小。
-
方法摘要
所有方法 实例方法 具体的方法 变量和类型 方法 描述 protected ObjectallocateArray(int len)分配一个数组来存储适当类型的项(由子类确定)。PositioncreatePosition(int offset)在内容中创建一个位置,以便在内容发生变化时跟踪更改。protected ObjectgetArray()访问阵列。protected intgetArrayLength()获取已分配数组的长度。voidgetChars(int where, int len, Segment chars)检索内容的一部分。protected intgetGapEnd()进入差距的终点。protected intgetGapStart()获得差距的开始。protected VectorgetPositionsInRange(Vector v, int offset, int length)返回包含位置的UndoPosRef实例的Vector,范围为offset至offset+length。StringgetString(int where, int len)检索内容的一部分。UndoableEditinsertString(int where, String str)在内容中插入字符串。intlength()返回内容的长度。UndoableEditremove(int where, int nitems)删除部分内容。protected voidreplace(int position, int rmSize, Object addItems, int addSize)用给定的新项替换存储中的给定逻辑位置。protected voidresetMarksAtZero()重置所有偏移量为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实例的positions。
-
-
-
方法详细信息
-
allocateArray
protected Object allocateArray(int len)
分配一个数组来存储适当类型的项(由子类确定)。
-
getArrayLength
protected int getArrayLength()
获取已分配数组的长度。
-
length
public int length()
返回内容的长度。- Specified by:
-
length在界面AbstractDocument.Content - 结果
- 长度> = 1
- 另请参见:
-
AbstractDocument.Content.length()
-
insertString
public UndoableEdit insertString(int where, String str) throws BadLocationException
在内容中插入字符串。- Specified by:
-
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
删除部分内容。- Specified by:
-
remove在界面AbstractDocument.Content - 参数
-
where- 起始位置> = 0,其中+ nitems <length() -
nitems- 要删除的字符数> = 0 - 结果
- 用于撤消的UndoableEdit对象
- 异常
-
BadLocationException- 如果指定的位置无效 - 另请参见:
-
AbstractDocument.Content.remove(int, int)
-
getString
public String getString(int where, int len) throws BadLocationException
检索内容的一部分。- Specified by:
-
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检索内容的一部分。 如果所需内容跨越差距,我们会复制内容。 如果所需内容未跨越间隙,则返回实际存储以避免复制,因为它是连续的。- Specified by:
-
getChars在界面AbstractDocument.Content - 参数
-
where- 起始位置> = 0,其中+ len <= length() -
len- 要检索的字符数> = 0 -
chars- 要返回字符的Segment对象 - 异常
-
BadLocationException- 如果指定的位置无效 - 另请参见:
-
AbstractDocument.Content.getChars(int, int, javax.swing.text.Segment)
-
createPosition
public Position createPosition(int offset) throws BadLocationException
在内容中创建一个位置,以便在内容发生变化时跟踪更改。- Specified by:
-
createPosition在界面AbstractDocument.Content - 参数
-
offset- 要跟踪的偏移量> = 0 - 结果
- 这个职位
- 异常
-
BadLocationException- 如果指定的位置无效
-
shiftEnd
protected void shiftEnd(int newSize)
缩小差距,移动任何必要的数据并更新相应的标记
-
shiftGap
protected void shiftGap(int newGapStart)
将间隙的起点移动到新位置,而不更改间隙的大小。 这会移动数组中的数据并相应地更新标记。
-
resetMarksAtZero
protected void resetMarksAtZero()
重置所有偏移量为0的标记,以使索引值为零。
-
shiftGapStartDown
protected void shiftGapStartDown(int newGapStart)
向下调整间隙端。 这不会移动任何数据,但会更新受边界更改影响的任何标记。 从旧间隙开始到新间隙开始的所有标记都被挤压到间隙的末端(它们的位置已被移除)。
-
shiftGapEndUp
protected void shiftGapEndUp(int newGapEnd)
向上调整间隙端。 这不会移动任何数据,但会更新受边界更改影响的任何标记。 从旧间隙到新间隙端的所有标记都被挤压到间隙的末端(它们的位置已被移除)。
-
getPositionsInRange
protected Vector getPositionsInRange(Vector v, int offset, int length)
返回包含位置的UndoPosRef实例的Vector,范围为offset到offset+length。 如果v不为空,则匹配的位置放在那里。 返回带有结果位置的向量。- 参数
-
v- 要使用的Vector,在null上创建一个新的 -
offset- 起始偏移量> = 0 -
length- 长度> = 0 - 结果
- 实例集
-
updateUndoPositions
protected void updateUndoPositions(Vector positions, int offset, int length)
重置positions所有UndoPosRef实例的positions。这适用于内部使用,并且通常对子类不感兴趣。
- 参数
-
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- 要存储的新项目。
-
-