- 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 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)
返回包含位置的UndoPosRef实例的Vector,范围为offset
至offset
+length
。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的标记,以使索引值为零。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实例的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
- 要存储的新项目。
-
-