public class GapContent extends Object implements AbstractDocument.Content, Serializable
跟踪变化的位置通常也很便宜。 位置实现(标记)存储数组索引,并且可以容易地从当前间隙位置计算顺序位置。 当间隙移动时,更改仅需要更新旧间隙和新间隙边界之间的标记,因此通常更新标记相当便宜。 标记被存储排序,以便它们可以通过二进制搜索快速定位。 这增加了添加商标的成本,并降低了保持标记更新的成本。
Constructor and Description |
---|
GapContent()
创建一个新的GapContent对象。
|
GapContent(int initialLength)
创建一个新的GapContent对象,指定初始大小。
|
Modifier and Type | Method and Description |
---|---|
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)
返回一个Vector,其中包含UndoPosRef的实例,位置范围为
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 。
|
public GapContent()
public GapContent(int initialLength)
initialLength
- 初始尺寸
protected Object allocateArray(int len)
protected int getArrayLength()
public int length()
length
在接口
AbstractDocument.Content
AbstractDocument.Content.length()
public UndoableEdit insertString(int where, String str) throws BadLocationException
insertString
在接口
AbstractDocument.Content
where
- 起始位置> = 0,<length()
str
- 要插入的非空字符串
BadLocationException
- 如果指定的位置无效
AbstractDocument.Content.insertString(int, java.lang.String)
public UndoableEdit remove(int where, int nitems) throws BadLocationException
remove
在界面
AbstractDocument.Content
where
- 起始位置> = 0,其中+ nitems <length()
nitems
- 要删除的字符数> = 0
BadLocationException
- 指定的位置是否无效
AbstractDocument.Content.remove(int, int)
public String getString(int where, int len) throws BadLocationException
getString
在接口
AbstractDocument.Content
where
- 起始位置> = 0
len
- 要检索的长度> = 0
BadLocationException
- 如果指定的位置无效
AbstractDocument.Content.getString(int, int)
public void getChars(int where, int len, Segment chars) throws BadLocationException
getChars
在界面
AbstractDocument.Content
where
- 起始位置> = 0,其中+ len <= length()
len
- 要检索的字符数> = 0
chars
- 返回字符的Segment对象
BadLocationException
- 如果指定的位置无效
AbstractDocument.Content.getChars(int, int, javax.swing.text.Segment)
public Position createPosition(int offset) throws BadLocationException
createPosition
在接口
AbstractDocument.Content
offset
- 追踪的偏移量> = 0
BadLocationException
- 如果指定的位置无效
protected void shiftEnd(int newSize)
protected void shiftGap(int newGapStart)
protected void resetMarksAtZero()
protected void shiftGapStartDown(int newGapStart)
protected void shiftGapEndUp(int newGapEnd)
protected Vector getPositionsInRange(Vector v, int offset, int length)
offset
至offset
+ length
。
如果v
不为空,则匹配的位置放在那里。
返回带有结果位置的向量。
v
- 要使用的向量,在null上创建一个新的
offset
- 起始偏移量> = 0
length
- 长度> = 0
protected void updateUndoPositions(Vector positions, int offset, int length)
positions
。
这是为了内部使用,通常不是子类的兴趣。
positions
- 要重置的UndoPosRef实例
protected final Object getArray()
protected final int getGapStart()
protected final int getGapEnd()
protected void replace(int position, int rmSize, Object addItems, int addSize)
position
- 进行position
的位置。
这不是底层存储阵列中的位置,而是连续空间中的位置被建模。
rmSize
- 要删除的项目数
addItems
- 要存放的新物品。