模块  java.desktop
软件包  javax.swing.text

Class GapContent

  • 实现的所有接口
    SerializableAbstractDocument.Content

    public class GapContent
    extends Object
    implements AbstractDocument.Content, Serializable
    使用类似于emacs使用的间隙缓冲区实现的AbstractDocument.Content接口的实现。 底层存储是一个unicode字符数组,在某处有间隙。 差距被移动到更改位置,以利用大多数更改位于同一位置的常见行为。 在间隙边界处发生的变化通常是便宜的,并且移动间隙通常比直接移动阵列内容以适应变化更便宜。

    跟踪变化的位置通常也很便宜。 位置实现(标记)存储数组索引,可以轻松地从当前间隙位置计算顺序位置。 当间隙移动时,更改仅需要更新新旧间隙边界之间的标记,因此通常更新标记非常便宜。 标记存储已排序,因此可以使用二进制搜索快速定位它们。 这增加了添加标记的成本,并降低了保持标记更新的成本。

    另请参见:
    Serialized Form
    • 构造方法详细信息

      • GapContent

        public GapContent()
        创建一个新的GapContent对象。 初始大小默认为10。
      • GapContent

        public GapContent​(int initialLength)
        创建一个新的GapContent对象,并指定初始大小。 初始大小不允许低于2,为隐含的突破和差距留出空间。
        参数
        initialLength - 初始大小
    • 方法详细信息

      • allocateArray

        protected Object allocateArray​(int len)
        分配一个数组来存储适当类型的项(由子类确定)。
      • getArrayLength

        protected int getArrayLength()
        获取已分配数组的长度。
      • 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,范围为offsetoffset + 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 - 要存储的新项目。