Класс AbstractDocument
- Все реализованные интерфейсы:
-
Serializable,Document
- Прямые известные подклассы:
-
DefaultStyledDocument,PlainDocument
public abstract class AbstractDocument extends Object implements Document, Serializable
Этот класс реализует механизм блокировки для документа. Он позволяет нескольким читателям или одному писателю, и писатели должны ждать, пока все наблюдатели документа не получат уведомление о предыдущем изменении, прежде чем начать другую мутацию документа. Чтение блокировки приобретается и освобождается с помощью метода render. Запись блокировки приобретается методами, которые изменяют документ, и удерживается на время вызова метода. Уведомление выполняется в потоке, который произвел мутацию, и поток имеет полный доступ для чтения к документу на время уведомления, но другие читатели остаются вне доступа до тех пор, пока уведомление не завершится. Уведомление — это уведомление о событии для бинов, которое не допускает дальнейших мутаций до тех пор, пока все слушатели не получат уведомление.
Любые модели, являющиеся подклассами этого класса и используемые в сочетании с текстовым компонентом, который имеет реализацию внешнего вида, полученную от BasicTextUI, могут быть безопасно обновлены асинхронно, поскольку весь доступ к иерархии представлений сериализован BasicTextUI, если документ имеет тип AbstractDocument. Блокировка предполагает, что независимый поток будет обращаться к иерархии представлений только из методов DocumentListener и что будет активен только один поток событий за раз.
Если требуется поддержка конкурентности, это влечет за собой следующие дополнительные последствия. Путь кода для любой реализации DocumentListener и любой реализации UndoListener должен быть потокобезопасным и не обращаться к блокировке компонента, если необходимо избежать тупиков. Методы repaint и revalidate на JComponent являются безопасными.
AbstractDocument моделирует предполагаемый разрыв в конце документа. Среди прочего это позволяет размещать курсор после последнего символа. В результате этого getLength возвращает значение на единицу меньше длины содержимого. Если вы создаете собственное содержимое, убедитесь, что вы инициализировали его с дополнительным символом. Обратитесь к 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 |
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 для аннотирования документа общими свойствами.- Возвращает:
- не-
nullсловарьDictionary - См. также:
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. Например, вы можете запросить слушателей документа для документа следующим кодом:
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)
Это реализовано для получения блокировки чтения на время выполнения объекта Runnable. Одновременно может выполняться несколько объектов Runnable, и все операции записи будут заблокированы, пока активны операции рендеринга. Если объект Runnable вызывает исключение, его блокировка будет безопасно освобождена. Нет защиты от объекта Runnable, который никогда не завершается, что фактически оставит документ заблокированным на всё время его существования.
Если данный объект Runnable пытается внести какие-либо изменения в этой реализации, произойдёт тупиковая ситуация. Нет отслеживания отдельных потоков рендеринга для обнаружения этой ситуации, но подкласс может понести издержки на отслеживание потоков и выдачу ошибки.
Этот метод потокобезопасен, хотя большинство методов Swing таковыми не являются. Дополнительную информацию см. в разделе Конкурентность в Swing.
- Specified by:
-
renderin interfaceDocument - Parameters:
-
r- the renderer to execute
getLength
public int getLength()
- Specified by:
-
getLengthin interfaceDocument - Returns:
- the length >= 0
- See Also:
addDocumentListener
public void addDocumentListener(DocumentListener listener)
- Specified by:
-
addDocumentListenerin interfaceDocument - Parameters:
-
listener- theDocumentListenerto add - See Also:
removeDocumentListener
public void removeDocumentListener(DocumentListener listener)
- Specified by:
-
removeDocumentListenerin interfaceDocument - Parameters:
-
listener- theDocumentListenerto remove - See Also:
getDocumentListeners
public DocumentListener[] getDocumentListeners()
- Returns:
- все слушатели изменений документа или пустой массив, если слушатели не зарегистрированы
- Since:
- 1.4
- See Also:
addUndoableEditListener
public void addUndoableEditListener(UndoableEditListener listener)
- Specified by:
-
addUndoableEditListenerin interfaceDocument - Parameters:
-
listener- theUndoableEditListenerto add - See Also:
removeUndoableEditListener
public void removeUndoableEditListener(UndoableEditListener listener)
- Specified by:
-
removeUndoableEditListenerin interfaceDocument - Parameters:
-
listener- theUndoableEditListenerto remove - See Also:
getUndoableEditListeners
public UndoableEditListener[] getUndoableEditListeners()
- Returns:
- все слушатели отмены изменений или пустой массив, если слушатели не зарегистрированы
- Since:
- 1.4
- See Also:
getProperty
public final Object getProperty(Object key)
getDocumentProperties().get(key);
- Specified by:
-
getPropertyin interfaceDocument - Parameters:
-
key- the non-nullproperty key - Returns:
- значение свойства или
null - See Also:
putProperty
public final void putProperty(Object key, Object value)
getDocumentProperties().put(key, value);Если
value равно null, этот метод удалит свойство.- Specified by:
-
putPropertyin interfaceDocument - Parameters:
-
key- the non-nullkey -
value- the property value - See Also:
remove
public void remove(int offs, int len) throws BadLocationException
Этот метод потокобезопасен, хотя большинство методов Swing таковыми не являются. Дополнительную информацию см. в разделе Конкурентность в Swing.
- Specified by:
-
removein interfaceDocument - Parameters:
-
offs- the starting offset >= 0 -
len- the number of characters to remove >= 0 - Throws:
-
BadLocationException- the given remove position is not a valid position within the document - See Also:
replace
public void replace(int offset, int length, String text, AttributeSet attrs) throws BadLocationException
offset по offset + length, и заменяет её на text. Реализация может обрабатывать это как две отдельные операции: удаление, за которым следует вставка, или как атомарную операцию замены.- Parameters:
-
offset- index of child element -
length- length of text to delete, may be 0 indicating don't delete anything -
text- text to insert,nullindicates no text to insert -
attrs- AttributeSet indicating attributes of inserted text,nullis legal, and typically treated as an empty attributeset, but exact interpretation is left to the subclass - Throws:
-
BadLocationException- the given position is not a valid position within the document - Since:
- 1.4
insertString
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException
Этот метод потокобезопасен, хотя большинство методов Swing таковыми не являются. Дополнительную информацию см. в разделе Конкурентность в Swing.
- Specified by:
-
insertStringin interfaceDocument - Parameters:
-
offs- the starting offset >= 0 -
str- the string to insert; does nothing with null/empty strings -
a- the attributes for the inserted content - Throws:
-
BadLocationException- the given insert position is not a valid position within the document - See Also:
getText
public String getText(int offset, int length) throws BadLocationException
- Указано:
-
getTextв интерфейсеDocument - Параметры:
-
offset- начальный смещение >= 0 -
length- количество символов для извлечения >= 0 - Возвращает:
- текст
- Исключения:
-
BadLocationException- заданный диапазон включает позицию, которая не является допустимой позицией в документе - См. также:
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;
}
- Указано:
-
getTextв интерфейсеDocument - Параметры:
-
offset- начальный смещение >= 0 -
length- количество символов для извлечения >= 0 -
txt- объект Segment для извлечения текста - Исключения:
-
BadLocationException- заданный диапазон включает позицию, которая не является допустимой позицией в документе
createPosition
public Position createPosition(int offs) throws BadLocationException
Этот метод потокобезопасен, хотя большинство методов Swing таковыми не являются. Подробнее см. Потоки в Swing.
- Указано:
-
createPositionв интерфейсеDocument - Параметры:
-
offs- позиция в модели >= 0 - Возвращает:
- позиция
- Исключения:
-
BadLocationException- если заданная позиция не представляет допустимое местоположение в ассоциированном документе - См. также:
getStartPosition
public final Position getStartPosition()
- Указано:
-
getStartPositionв интерфейсеDocument - Возвращает:
- позиция
getEndPosition
public final Position getEndPosition()
- Указано:
-
getEndPositionв интерфейсеDocument - Возвращает:
- позиция
getRootElements
public Element[] getRootElements()
- Указано:
-
getRootElementsв интерфейсеDocument - Возвращает:
- корневой элемент
getDefaultRootElement
public abstract Element getDefaultRootElement()
- Указано:
-
getDefaultRootElementв интерфейсеDocument - Возвращает:
- корневой элемент
- См. также:
getBidiRootElement
public Element getBidiRootElement()
- Возвращает:
- корневой элемент двунаправленной структуры для этого документа
getParagraphElement
public abstract Element getParagraphElement(int pos)
- Параметры:
-
pos- начальный смещение >= 0 - Возвращает:
- элемент
getAttributeContext
protected final AbstractDocument.AttributeContext getAttributeContext()
- Возвращает:
- контекст
insertUpdate
protected void insertUpdate(AbstractDocument.DefaultDocumentEvent chng, AttributeSet attr)
- Параметры:
-
chng- описание изменения -
attr- атрибуты изменения
removeUpdate
protected void removeUpdate(AbstractDocument.DefaultDocumentEvent chng)
- Параметры:
-
chng- описание изменения
postRemoveUpdate
protected void postRemoveUpdate(AbstractDocument.DefaultDocumentEvent chng)
- Параметры:
-
chng- описание изменения
dump
public void dump(PrintStream out)
- Параметры:
-
out- поток вывода
getContent
protected final AbstractDocument.Content getContent()
- Возвращает:
- содержимое
createLeafElement
protected Element createLeafElement(Element parent, AttributeSet a, int p0, int p1)
- Параметры:
-
parent- родительский элемент -
a- атрибуты элемента -
p0- начало диапазона >= 0 -
p1- конец диапазона >= p0 - Возвращает:
- новый элемент
createBranchElement
protected Element createBranchElement(Element parent, AttributeSet a)
- Параметры:
-
parent- родительский элемент -
a- атрибуты - Возвращает:
- элемент
getCurrentWriter
protected final Thread getCurrentWriter()
- Возвращает:
- нить, активно изменяющая документ, или
nullесли нет активных изменений
writeLock
protected final void writeLock()
writeLock, если она не пытается получить дополнительные writeLock в рамках уведомления документа. Попытка получить writeLock в рамках уведомления DocumentListener приведет к IllegalStateException. Возможность получения более одной writeLock на нить позволяет подклассам получить writeLock, выполнить несколько операций, а затем освободить блокировку. Вызовы writeLock должны быть сбалансированы вызовами writeUnlock, в противном случае Document останется заблокированной, чтобы предотвратить чтение или запись.
- Исключения:
-
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, 2023, 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/21/docs/api/java.desktop/javax/swing/text/AbstractDocument.html