Класс AbstractDocument
- Все реализованные интерфейсы:
-
Serializable,Document
- Прямые известные подклассы:
-
DefaultStyledDocument,PlainDocument
public abstract class AbstractDocument extends Object implements Document, Serializable
Этот класс реализует механизм блокировки для документа. Он позволяет множественным читателям или одному писателю, и писатели должны дождаться, пока все наблюдатели документа не будут уведомлены о предыдущем изменении, прежде чем начать другую мутацию документа. Чтение блокировки приобретается и освобождается с помощью метода render. Запись блокировки приобретается методами, которые изменяют документ, и удерживается на протяжении всего вызова метода. Уведомление выполняется на потоке, который произвёл изменение, и поток имеет полный доступ для чтения к документу на протяжении всего уведомления, но другие читатели исключаются до завершения уведомления. Уведомление — это уведомление о событии beans, которое не допускает дальнейших изменений, пока все слушатели не будут уведомлены.
Любые модели, унаследованные от этого класса и используемые совместно с текстовым компонентом, имеющим реализацию внешнего вида, которая получена из BasicTextUI, могут быть безопасно обновлены асинхронно, так как весь доступ к иерархии представлений сериализован BasicTextUI, если документ типа AbstractDocument. Блокировка предполагает, что отдельный поток будет обращаться к иерархии представлений только из методов DocumentListener и что будет только один активный поток событий за раз.
Если требуется поддержка параллельности, существуют следующие дополнительные последствия. Путь кода для любой реализации DocumentListener и любой реализации UndoListener должен быть потокобезопасен и не должен обращаться к блокировке компонента, если пытается быть безопасным от тупиков. Методы repaint и revalidate на JComponent безопасны.
AbstractDocument моделирует предполагаемый разрыв в конце документа. Это, среди прочего, позволяет поместить курсор после последнего символа. В результате этого getLength возвращает значение на единицу меньше длины содержимого. Если вы создаёте свой собственный Content, убедитесь, что он инициализирован с дополнительным символом. Обратитесь к StringContent и GapContent для примеров этого. Ещё одно следствие этого заключается в том, что элементы, моделирующие предполагаемый конечный символ, будут иметь endOffset == (getLength() + 1). Например, в DefaultStyledDocument getParagraphElement(getLength()).getEndOffset() == getLength() + 1
.
Предупреждение: Сериализованные объекты этого класса не будут совместимы с будущими выпусками Swing. Текущая поддержка сериализации подходит для краткосрочного хранения или RMI между приложениями, использующими ту же версию Swing. С версии 1.4 добавлена поддержка длительного хранения всех JavaBeans в пакет java.beans. Пожалуйста, обратитесь к XMLEncoder.
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
class |
AbstractDocument.AbstractElement |
Реализует абстрактную часть элемента. |
static interface |
AbstractDocument.AttributeContext |
Интерфейс, который может использоваться для того, чтобы реализации MutableAttributeSet могли использовать подключаемые методы сжатия атрибутов. |
class |
AbstractDocument.BranchElement |
Реализует составной элемент, содержащий другие элементы. |
static interface |
AbstractDocument.Content |
Интерфейс для описания последовательности символьного содержимого, которое может быть отредактировано. |
class |
AbstractDocument.DefaultDocumentEvent |
Хранит изменения документа по мере его изменения. |
static class |
AbstractDocument.ElementEdit |
Реализация ElementChange, которая может быть добавлена к событию документа. |
class |
AbstractDocument.LeafElement |
Реализует элемент, который непосредственно представляет содержимое определенного типа. |
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
protected static final String |
BAD_LOCATION |
Сообщение об ошибке, указывающее на неправильное расположение. |
static final String |
BidiElementName |
Имя элементов, используемых для хранения однонаправленного блока. |
static final String |
ContentElementName |
Имя элементов, используемых для представления содержимого. |
static final String |
ElementNameAttribute |
Имя атрибута, используемого для указания имён элементов. |
protected EventListenerList |
listenerList |
Список слушателей событий для документа. |
static final String |
ParagraphElementName |
Имя элементов, используемых для представления абзацев. |
static final String |
SectionElementName |
Имя элементов, используемых для представления разделов (строк/абзацев). |
Поля, объявленные в интерфейсе javax.swing.text.Document
StreamDescriptionProperty, TitleProperty
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создаёт новый AbstractDocument, обернутый вокруг некоторого заданного механизма хранения содержимого. |
|
protected |
Создаёт новый AbstractDocument, обернутый вокруг некоторого заданного механизма хранения содержимого. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addDocumentListener |
Добавляет слушателя изменений документа для получения уведомлений о любых изменениях. |
void |
addUndoableEditListener |
Добавляет слушателя отмены для получения уведомлений о любых изменениях. |
protected Element |
createBranchElement |
Создает элемент ветви документа, который может содержать другие элементы. |
protected Element |
createLeafElement |
Создает элемент листа документа. |
Position |
createPosition |
Возвращает позицию, которая будет отслеживать изменения по мере изменения документа. |
void |
dump |
Выдает диагностический дамп. |
protected void |
fireChangedUpdate |
Уведомляет всех слушателей, которые выразили интерес к уведомлениям об этом типе события. |
protected void |
fireInsertUpdate |
Уведомляет всех слушателей, которые выразили интерес к уведомлениям об этом типе события. |
protected void |
fireRemoveUpdate |
Уведомляет всех слушателей, которые выразили интерес к уведомлениям об этом типе события. |
protected void |
fireUndoableEditUpdate |
Уведомляет всех слушателей, которые выразили интерес к уведомлениям об этом типе события. |
int |
getAsynchronousLoadPriority() |
Получает приоритет асинхронной загрузки. |
protected final AbstractDocument.AttributeContext |
getAttributeContext() |
Получает контекст для управления атрибутами. |
Element |
getBidiRootElement() |
Возвращает корневой элемент двунаправленной структуры для этого документа. |
protected final AbstractDocument.Content |
getContent() |
Получает содержимое документа. |
protected final Thread |
getCurrentWriter() |
Получает текущую нить записи, если она существует. |
abstract Element |
getDefaultRootElement() |
Возвращает корневой элемент, на основе которого должны отображаться представления, если не предоставлен другой механизм назначения представлений элементам структуры. |
DocumentFilter |
getDocumentFilter() |
Возвращает DocumentFilter, ответственный за фильтрацию вставки/удаления. |
DocumentListener[] |
getDocumentListeners() |
Возвращает массив всех слушателей изменений документа, зарегистрированных в этом документе. |
Dictionary<Object, |
getDocumentProperties() |
Поддерживает управление набором свойств. |
final Position |
getEndPosition() |
Возвращает позицию, которая представляет конец документа. |
int |
getLength() |
Возвращает длину данных. |
<T extends EventListener> |
getListeners |
Возвращает массив всех объектов, которые в данный момент зарегистрированы как FooListener в этом документе. |
abstract Element |
getParagraphElement |
Получает элемент абзаца, содержащий заданную позицию. |
final Object |
getProperty |
Удобный метод для поиска значения свойства. |
Element[] |
getRootElements() |
Получает все определенные корневые элементы. |
final Position |
getStartPosition() |
Возвращает позицию, представляющую начало документа. |
String |
getText |
Получает последовательность текста из документа. |
void |
getText |
Получает текст, содержащийся в заданной части документа. |
UndoableEditListener[] |
getUndoableEditListeners() |
Возвращает массив всех слушателей редактирования, которые могут быть отменены, зарегистрированных в этом документе. |
void |
insertString |
Вставляет содержимое в документ. |
protected void |
insertUpdate |
Обновляет структуру документа в результате вставки текста. |
protected void |
postRemoveUpdate |
Обновляет любую структуру документа в результате удаления текста. |
final void |
putProperty |
Удобный метод для сохранения значения свойства. |
final void |
readLock() |
Получает блокировку для начала чтения некоторого состояния из документа. |
final void |
readUnlock() |
Выполняет разблокировку чтения. |
void |
remove |
Удаляет содержимое из документа. |
void |
removeDocumentListener |
Удаляет слушателя изменений документа. |
void |
removeUndoableEditListener |
Удаляет слушателя отмены. |
protected void |
removeUpdate |
Обновляет любую структуру документа в результате удаления текста. |
void |
render |
Это позволяет безопасно отображать модель при наличии валюты, если модель поддерживает асинхронное обновление. |
void |
replace |
Удаляет область текста от offset до offset + length, и заменяет её на text. |
void |
setAsynchronousLoadPriority |
Устанавливает приоритет асинхронной загрузки. |
void |
setDocumentFilter |
Устанавливает DocumentFilter. |
void |
setDocumentProperties |
Заменяет словарь свойств документа для данного документа. |
protected final void |
writeLock() |
Получает блокировку для начала изменения документа, который защищает эта блокировка. |
protected final void |
writeUnlock() |
Освобождает блокировку записи, ранее полученную с помощью writeLock. |
Подробное описание полей
listenerList
protected EventListenerList listenerList
BAD_LOCATION
protected static final String BAD_LOCATION
- См. также:
ParagraphElementName
public static final String ParagraphElementName
- См. также:
ContentElementName
public static final String ContentElementName
- См. также:
SectionElementName
public static final String SectionElementName
- См. также:
BidiElementName
public static final String BidiElementName
- См. также:
ElementNameAttribute
public static final String ElementNameAttribute
- См. также:
Подробное описание конструкторов
AbstractDocument
protected AbstractDocument(AbstractDocument.Content data)
AbstractDocument, обернутый вокруг некоторого указанного механизма хранения содержимого.- Параметры:
-
data- содержимое
AbstractDocument
protected AbstractDocument(AbstractDocument.Content data, AbstractDocument.AttributeContext context)
AbstractDocument, обернутый вокруг некоторого указанного механизма хранения содержимого.- Параметры:
-
data- содержимое -
context- контекст атрибутов
Подробное описание методов
getDocumentProperties
public Dictionary<Object,Object> getDocumentProperties()
documentProperties, чтобы аннотировать документ свойствами, относящимися ко всему документу.- Возвращает:
- не-
nullDictionary - См. также:
setDocumentProperties
public void setDocumentProperties(Dictionary<Object,Object> x)
- Параметры:
-
x- новый словарь - См. также:
fireInsertUpdate
protected void fireInsertUpdate(DocumentEvent e)
- Параметры:
-
e- событие - См. также:
fireChangedUpdate
protected void fireChangedUpdate(DocumentEvent e)
- Параметры:
-
e- событие - См. также:
fireRemoveUpdate
protected void fireRemoveUpdate(DocumentEvent e)
- Параметры:
-
e- событие - См. также:
fireUndoableEditUpdate
protected void fireUndoableEditUpdate(UndoableEditEvent e)
- Параметры:
-
e- событие - См. также:
getListeners
public <T extends EventListener> T[] getListeners(Class<T> listenerType)
FooListener для этого документа. FooListener регистрируются с помощью метода addFooListener. Вы можете указать аргумент listenerType с использованием литерала класса, такого как FooListener.class. Например, вы можете запросить у документа d его слушателей событий с помощью следующего кода:
DocumentListener[] mls = (DocumentListener[])(d.getListeners(DocumentListener.class));Если такие слушатели не существуют, этот метод возвращает пустой массив.
- Тип параметров:
-
T- тип слушателя - Параметры:
-
listenerType- тип запрашиваемых слушателей - Возвращает:
- массив всех объектов, зарегистрированных как
FooListenerдля этого компонента, или пустой массив, если такие слушатели не были добавлены - Исключения:
-
ClassCastException- еслиlistenerTypeне указывает класс или интерфейс, реализующийjava.util.EventListener - С момента:
- 1.3
- См. также:
getAsynchronousLoadPriority
public int getAsynchronousLoadPriority()
- Возвращает:
- приоритет асинхронной загрузки или
-1если документ не должен загружаться асинхронно
setAsynchronousLoadPriority
public void setAsynchronousLoadPriority(int p)
- Параметры:
-
p- новый приоритет асинхронной загрузки; значение меньше нуля указывает, что документ не должен загружаться асинхронно
setDocumentFilter
public void setDocumentFilter(DocumentFilter filter)
DocumentFilter. DocumentFilter передается insert и remove для условного разрешения вставки/удаления текста. Значение null указывает, что никакого фильтрации не произойдет.- Параметры:
-
filter-DocumentFilterиспользуемый для ограничения текста - С момента:
- 1.4
- См. также:
getDocumentFilter
public DocumentFilter getDocumentFilter()
DocumentFilter, который отвечает за фильтрацию вставок/удалений. Значение null указывает, что фильтрации не должно происходить.- Возвращает:
- DocumentFilter
- С момента:
- 1.4
- См. также:
render
public void render(Runnable r)
Эта реализация приобретает блокировку для чтения на всё время выполнения исполняемого фрагмента. Одновременно могут выполняться несколько исполняемых фрагментов, и все операции записи будут заблокированы, пока активны операции отображения. Если исполняемый фрагмент кода вызывает исключение, его блокировка будет безопасно освобождена. Нет защиты от исполняемого фрагмента кода, который никогда не завершается, что фактически оставит документ заблокированным на всё время его существования.
Если указанный исполняемый фрагмент кода пытается внести изменения в этой реализации, произойдёт тупиковая ситуация. Нет отслеживания отдельных потоков отображения, чтобы обнаружить эту ситуацию, но подкласс может понести издержки на отслеживание их и выброс ошибки.
Этот метод потокобезопасен, хотя большинство методов Swing не являются таковыми. Для получения дополнительной информации см. Асинхронность в Swing.
- Указано в:
-
renderв интерфейсеDocument - Параметры:
-
r- рендерер для выполнения
getLength
public int getLength()
- Указано в:
-
getLengthв интерфейсеDocument - Возвращает:
- длину >= 0
- См. также:
addDocumentListener
public void addDocumentListener(DocumentListener listener)
- Указано в:
-
addDocumentListenerв интерфейсеDocument - Параметры:
-
listener- слушательDocumentListenerдля добавления - См. также:
removeDocumentListener
public void removeDocumentListener(DocumentListener listener)
- Указано в:
-
removeDocumentListenerв интерфейсеDocument - Параметры:
-
listener- слушательDocumentListenerдля удаления - См. также:
getDocumentListeners
public DocumentListener[] getDocumentListeners()
- Возвращает:
- все слушатели
DocumentListenerэтого документа или пустой массив, если слушатели изменений документа не зарегистрированы - С:
- 1.4
- См. также:
addUndoableEditListener
public void addUndoableEditListener(UndoableEditListener listener)
UndoableEdit, вызовут соответствующее событие DocumentEvent, чтобы синхронизировать представления с моделью.- Указано в:
-
addUndoableEditListenerв интерфейсеDocument - Параметры:
-
listener- слушательUndoableEditListenerдля добавления - См. также:
removeUndoableEditListener
public void removeUndoableEditListener(UndoableEditListener listener)
- Указано в:
-
removeUndoableEditListenerв интерфейсеDocument - Параметры:
-
listener- слушательUndoableEditListenerдля удаления - См. также:
getUndoableEditListeners
public UndoableEditListener[] getUndoableEditListeners()
- Возвращает:
- все слушатели
UndoableEditListenerэтого документа или пустой массив, если слушатели отмены/повтора не зарегистрированы - С:
- 1.4
- См. также:
getProperty
public final Object getProperty(Object key)
getDocumentProperties().get(key);
- Указано в:
-
getPropertyв интерфейсеDocument - Параметры:
-
key- ключ свойства, не являющийсяnull - Возвращает:
- значение этого свойства или
null - См. также:
putProperty
public final void putProperty(Object key, Object value)
getDocumentProperties().put(key, value);Если
value равно null, этот метод удалит свойство.- Указано в:
-
putPropertyв интерфейсеDocument - Параметры:
-
key- ключ свойства, не являющийсяnull -
value- значение свойства - См. также:
remove
public void remove(int offs, int len) throws BadLocationException
Этот метод потокобезопасен, хотя большинство методов Swing не являются таковыми. Для получения дополнительной информации см. Асинхронность в Swing.
- Указано в:
-
removeв интерфейсеDocument - Параметры:
-
offs- начальный смещение >= 0 -
len- количество символов для удаления >= 0 - Исключения:
-
BadLocationException- заданная позиция удаления не является допустимой позицией в документе - См. также:
replace
public void replace(int offset, int length, String text, AttributeSet attrs) throws BadLocationException
offset до offset + length, и заменяет её на text. Реализация может обрабатывать это как две отдельные операции: удаление, за которым следует вставка, или как атомную операцию замены.- Параметры:
-
offset- индекс дочернего элемента -
length- длина текста для удаления, может быть 0, что означает ничего не удалять -
text- текст для вставки,nullуказывает на отсутствие текста для вставки -
attrs- AttributeSet, указывающий атрибуты вставленного текста,nullявляется допустимым и обычно рассматривается как пустой набор атрибутов, но точное толкование оставляется подклассу - Исключения:
-
BadLocationException- заданная позиция не является допустимой позицией в документе - С:
- 1.4
insertString
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
Этот метод потокобезопасен, хотя большинство методов Swing не являются таковыми. Для получения дополнительной информации см. Асинхронность в Swing.
- Указано в:
-
insertStringв интерфейсеDocument - Параметры:
-
offs- начальное смещение >= 0 -
str- строка для вставки; ничего не делает с null/пустыми строками -
a- атрибуты вставляемого содержимого - Исключения:
-
BadLocationException- заданная позиция вставки не является допустимой позицией в документе - См. также:
getText
public String getText(int offset, int length) throws BadLocationException
- Specified by:
-
getTextв интерфейсеDocument - Parameters:
-
offset- начальный смещение >= 0 -
length- количество символов для извлечения >= 0 - Returns:
- текст
- Throws:
-
BadLocationException- заданный диапазон включает позицию, которая не является допустимой позицией в документе - See Also:
getText
public void getText(int offset, int length, Segment txt) throws BadLocationException
Если свойство partialReturn параметра txt равно false, возвращаемые данные в Segment будут иметь полную запрошенную длину и могут быть или не быть копией, в зависимости от того, как данные были сохранены. Если свойство partialReturn равно true, возвращается только количество текста, которое можно вернуть без создания копии. Использование частичных возвратов обеспечит лучшую производительность в ситуациях, когда сканируются большие части документа. Ниже приведен пример использования частичного возврата для доступа ко всему документу:
int nleft = doc.getDocumentLength();
Segment text = new Segment();
int offs = 0;
text.setPartialReturn(true);
while (nleft > 0) {
doc.getText(offs, nleft, text);
// do something with text
nleft -= text.count;
offs += text.count;
}
- Specified by:
-
getTextв интерфейсеDocument - Parameters:
-
offset- начальный смещение >= 0 -
length- количество символов для извлечения >= 0 -
txt- объект Segment для извлечения текста - Throws:
-
BadLocationException- заданный диапазон включает позицию, которая не является допустимой позицией в документе
createPosition
public Position createPosition(int offs) throws BadLocationException
Этот метод потокобезопасен, хотя большинство методов Swing таковыми не являются. Подробнее см. Многопоточность в Swing.
- Specified by:
-
createPositionв интерфейсеDocument - Parameters:
-
offs- позиция в модели >= 0 - Returns:
- позиция
- Throws:
-
BadLocationException- если заданная позиция не представляет допустимое местоположение в связанном документе - See Also:
getStartPosition
public final Position getStartPosition()
- Specified by:
-
getStartPositionв интерфейсеDocument - Returns:
- позиция
getEndPosition
public final Position getEndPosition()
- Specified by:
-
getEndPositionв интерфейсеDocument - Returns:
- позиция
getRootElements
public Element[] getRootElements()
- Specified by:
-
getRootElementsв интерфейсеDocument - Returns:
- корневой элемент
getDefaultRootElement
public abstract Element getDefaultRootElement()
- Specified by:
-
getDefaultRootElementв интерфейсеDocument - Returns:
- корневой элемент
- See Also:
getBidiRootElement
public Element getBidiRootElement()
- Returns:
- корневой элемент двунаправленной структуры для этого документа
getParagraphElement
public abstract Element getParagraphElement(int pos)
- Parameters:
-
pos- начальный смещение >= 0 - Returns:
- элемент
getAttributeContext
protected final AbstractDocument.AttributeContext getAttributeContext()
- Returns:
- контекст
insertUpdate
protected void insertUpdate(AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr)
- Parameters:
-
chng- описание изменения -
attr- атрибуты для изменения
removeUpdate
protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
- Parameters:
-
chng- описание изменения
postRemoveUpdate
protected void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
- Parameters:
-
chng- описание изменения
dump
public void dump(PrintStream out)
- Parameters:
-
out- поток вывода
getContent
protected final AbstractDocument.Content getContent()
- Returns:
- содержимое
createLeafElement
protected Element createLeafElement(Element parent, AttributeSet a, int p0, int p1)
- Parameters:
-
parent- родительский элемент -
a- атрибуты элемента -
p0- начало диапазона >= 0 -
p1- конец диапазона >= p0 - Returns:
- новый элемент
createBranchElement
protected Element createBranchElement(Element parent, AttributeSet a)
- Parameters:
-
parent- родительский элемент -
a- атрибуты - Returns:
- элемент
getCurrentWriter
protected final Thread getCurrentWriter()
- Returns:
- нить, активно изменяющая документ, или
nullесли нет текущих модификаций
writeLock
protected final void writeLock()
writeLock, пока она не попытается получить дополнительные writeLock из уведомления документа. Попытка получить writeLock из уведомления DocumentListener приведёт к IllegalStateException. Возможность получения более одной writeLock на нить позволяет подклассам получить writeLock, выполнить ряд операций, а затем освободить блокировку. Вызовы writeLock должны быть сбалансированы вызовами writeUnlock, иначе Document останется заблокированной, чтобы невозможно было выполнить чтение или запись.
- Throws:
-
IllegalStateException- выбрасывается при нелегальной попытке получить блокировку. Если документ реализован правильно, это может произойти только в случае, если слушатель документа пытается изменить документ. Эта ситуация нарушает модель событий bean, где порядок доставки не гарантируется, и все слушатели должны быть уведомлены перед дальнейшими изменениями.
writeUnlock
protected final void writeUnlock()
writeLock. После декремента счётчика блокировки, если нет активных блокировок, это позволит новому писателю или читателям.- См. также:
readLock
public final void readLock()
readUnlock.- См. также:
readUnlock
public final void readUnlock()
readLock();
try {
// do something
} finally {
readUnlock();
}
- См. также:
© 1993, 2021, 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.
https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/javax/swing/text/AbstractDocument.html