Класс GapContent
- java.lang.Object
-
- javax.swing.text.GapContent
- Все реализованные интерфейсы:
- Serializable, AbstractDocument.Content
public class GapContent extends Object implements AbstractDocument.Content, Serializable
Реализация интерфейса AbstractDocument.Content, использующая буфер с разрывом (gap), аналогичный тому, что используется в emacs. Базовое хранилище — массив символов Юникода с разрывом в определенном месте. Разрыв перемещается в место изменений, что эффективно для случаев, когда большинство изменений происходит в одном месте. Изменения на границе разрыва обычно выполняются быстро, а перемещение разрыва, как правило, дешевле, чем непосредственное перемещение содержимого массива для адаптации к изменениям.
Отслеживание позиций изменений также обычно выполняется быстро. Реализации Position (метки) хранят индекс в массиве и могут легко вычислить последовательную позицию из текущего местоположения разрыва. Изменения требуют обновления меток только между старой и новой границами разрыва при перемещении разрыва, поэтому, как правило, обновление меток довольно быстро. Метки хранятся в отсортированном виде, что позволяет быстро находить их с помощью бинарного поиска. Это увеличивает стоимость добавления метки и уменьшает стоимость ее обновления.
Конструкторы
| Конструктор и описание |
|---|
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 для позиций в диапазоне от |
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) Сброс местоположения для всех экземпляров UndoPosRef в |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
GapContent
public GapContent()
Создаёт новый объект GapContent. Начальный размер по умолчанию равен 10.
GapContent
public GapContent(int initialLength)
Создаёт новый объект GapContent с указанным начальным размером. Начальный размер не может быть меньше 2, чтобы обеспечить место для предполагаемого разрыва и промежутка.
- Параметры:
-
initialLength- начальный размер
Методы
allocateArray
protected Object allocateArray(int len)
Выделяет массив для хранения элементов соответствующего типа (который определяется подклассом).
getArrayLength
protected int getArrayLength()
Возвращает длину выделенного массива.
length
public int length()
Возвращает длину содержимого.
- Определено в:
-
lengthв интерфейсеAbstractDocument.Content - Возвращает:
- длину >= 1
- См. также:
AbstractDocument.Content.length()
insertString
public UndoableEdit insertString(int where,
String str)
throws BadLocationException Вставляет строку в содержимое.
- Определено в:
-
insertStringв интерфейсеAbstractDocument.Content - Параметры:
-
where- начальная позиция >= 0, < length() -
str- вставляемая непустая строка - Возвращает:
- объект UndoableEdit для отмены
- Исключения:
-
BadLocationException- если указанная позиция некорректна - См. также:
AbstractDocument.Content.insertString(int, java.lang.String)
remove
public UndoableEdit remove(int where,
int nitems)
throws BadLocationException Удаляет часть содержимого.
- Определено в:
-
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 Извлекает часть содержимого.
- Определено в:
-
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 Извлекает часть содержимого. Если нужное содержимое охватывает промежуток, мы копируем содержимое. Если нужное содержимое не охватывает промежуток, возвращается фактическое хранилище, чтобы избежать копирования, так как оно непрерывно.
- Определено в:
-
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 Создаёт позицию в содержимом, которая будет отслеживать изменения по мере изменения содержимого.
- Определено в:
-
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 для позиций в диапазоне offset по offset + length. Если v не null, соответствующие позиции помещаются в него. Возвращается вектор с получившимися позициями.
- Параметры:
-
v- вектор для использования, новый создаётся при null -
offset- начальное смещение >= 0 -
length- длина >= 0 - Возвращает:
- набор экземпляров
updateUndoPositions
protected void updateUndoPositions(Vector positions,
int offset,
int length) Сбрасывает положение для всех экземпляров UndoPosRef в positions.
Этот метод предназначен для внутреннего использования и, как правило, не интересен подклассам.
- Параметры:
-
positions- экземпляры UndoPosRef для сброса
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- новые элементы для размещения в хранилище.
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.