Документация интерфейса

Все известные подинтерфейсы:
StyledDocument
Все известные реализующие классы:
AbstractDocument, DefaultStyledDocument, HTMLDocument, PlainDocument
public interface Document

Интерфейс Document предназначен для хранения текста и служит моделью для текстовых компонентов Swing. Он позволяет масштабировать функциональность от простых потребностей (обычное текстовое поле) до сложных (например, HTML или XML документ).

Содержание

На самом базовом уровне текст может быть представлен как линейная последовательность символов. Для поддержки интернационализации модель текста Swing использует символы Unicode. Последовательность символов, отображаемая в текстовом компоненте, обычно называется содержанием компонента.

Для обозначения местоположений в последовательности используются координаты между двумя символами. Как показано на диаграмме ниже, положение в текстовом документе может быть представлено позицией или смещением. Эта позиция нумеруется с нуля.

The following text describes this graphic.

В примере, если содержание документа — последовательность "The quick brown fox", как показано на предыдущей диаграмме, положение перед словом "The" — 0, а положение после "The" и перед последующим пробелом — 3. Вся последовательность символов в "The" называется диапазоном.

Следующие методы обеспечивают доступ к данным символов, составляющих содержание.

Структура

Текст редко представляется как простое содержание без структуры. Обычно текст имеет определённую структуру. Конкретная реализация документа отвечает за модель этой структуры. Она может быть простой (например, без структуры, как в простом текстовом поле) или более сложной, например, как на диаграмме ниже.

Diagram shows Book->Chapter->Paragraph

Единицей структуры (узлом дерева) является интерфейс Element. Каждый элемент может быть помечен набором атрибутов. Эти атрибуты (пары имя/значение) определяются интерфейсом AttributeSet.

Следующие методы обеспечивают доступ к структуре документа.

Изменения

Все документы должны поддерживать добавление и удаление текста. Обычно текст вставляется и удаляется с помощью клавиатуры или мыши. Как эти операции влияют на структуру документа, зависит от реализации.

Следующие методы связаны с изменениями содержания документа:

Уведомления

Изменения в Document должны быть сообщены заинтересованным наблюдателям. Уведомления об изменениях следуют правилам модели событий, определённым для JavaBeans. После отправки уведомления обо всех слушателях нужно уведомить, прежде чем проводить дальнейшие изменения в источнике события. Порядок доставки не гарантируется.

Уведомления предоставляются в виде двух отдельных событий, DocumentEvent и UndoableEditEvent. Если изменение выполняется в Document через его API, будет отправлено событие DocumentEvent всем зарегистрированным DocumentListeners. Если реализация Document поддерживает возможности отмены/повторения, будет отправлено событие UndoableEditEvent всем зарегистрированным UndoableEditListener. Если отменяется выполнение действия, то документ должен сгенерировать событие DocumentEvent, чтобы указать, что он изменился снова. В этом случае не должно генерироваться событие UndoableEditEvent, так как это действие является источником изменения, а не изменением в Document через его API.

The preceding text describes this graphic.

Обращаясь к вышеприведённой диаграмме, предположим, что компонент слева изменяет объект документа, представленный синим прямоугольником. Документ реагирует, отправляя событие DocumentEvent обоим представлениям компонента и событие UndoableEditEvent слушающей логике, которая поддерживает буфер истории.

Теперь предположим, что компонент справа изменяет тот же документ. Документ снова отправляет событие DocumentEvent обоим представлениям компонента и событие UndoableEditEvent слушающей логике, которая поддерживает буфер истории.

Если буфер истории отменяет последнее действие (т.е. отменяется последнее UndoableEdit), в оба представления отправляется событие DocumentEvent, заставляя их отразить отменённое изменение в документе (т.е. удаление изменения компонента справа). Если буфер истории отменяет ещё одно изменение, отправляется ещё одно событие DocumentEvent в оба представления, заставляя их отразить отменённое изменение в документе (т.е. удаление изменения компонента слева).

Методы, связанные с наблюдением за изменениями в документе:

Свойства

Реализации документов обычно имеют набор свойств, связанных с ними во время выполнения. Две хорошо известных свойства — StreamDescriptionProperty, которое можно использовать для описания источника Document, и TitleProperty, которое можно использовать для наименования Document. Методы, связанные со свойствами:

Для получения дополнительной информации о классе Document, см. Swing Connection и, в частности, статью Element Interface.

См. также:
DocumentEvent, DocumentListener, UndoableEditEvent, UndoableEditListener, Element, Position, AttributeSet

Поля

Модификатор и тип Поле Описание
static String StreamDescriptionProperty

Имя свойства для описания потока, используемого для инициализации документа.

static String TitleProperty

Имя свойства для названия документа, если оно есть.

Методы

Модификатор и тип Метод Описание
void addDocumentListener​(DocumentListener listener)

Регистрирует данного наблюдателя для получения уведомлений об изменениях в документе.

void addUndoableEditListener​(UndoableEditListener listener)

Регистрирует данного наблюдателя для получения уведомлений об отменяемых изменениях в документе.

Position createPosition​(int offs)

Этот метод позволяет приложению пометить место в последовательности символьного содержания.

Element getDefaultRootElement()

Возвращает корневой элемент, на основе которого должны строиться представления, если не предоставлен какой-либо другой механизм для присвоения представлений структурам элементов.

Position getEndPosition()

Возвращает позицию, представляющую конец документа.

int getLength()

Возвращает количество символов в содержании документа.

Object getProperty​(Object key)

Получает свойства, связанные с документом.

Element[] getRootElements()

Возвращает все определённые корневые элементы.

Position getStartPosition()

Возвращает позицию, представляющую начало документа.

String getText​(int offset, int length)

Получает текст, содержащийся в заданной части документа.

void getText​(int offset, int length, Segment txt)

Получает текст, содержащийся в заданной части документа.

void insertString​(int offset, String str, AttributeSet a)

Вставляет строку содержания.

void putProperty​(Object key, Object value)

Присваивает свойство документу.

void remove​(int offs, int len)

Удаляет часть содержания документа.

void removeDocumentListener​(DocumentListener listener)

Отменяет регистрацию данного наблюдателя из списка уведомлений, чтобы он больше не получал обновлений об изменениях.

void removeUndoableEditListener​(UndoableEditListener listener)

Отменяет регистрацию данного наблюдателя из списка уведомлений, чтобы он больше не получал обновлений.

void render​(Runnable r)

Позволяет безопасно отобразить модель в условиях конкуренции, если модель поддерживает асинхронное обновление.

Поля

StreamDescriptionProperty

static final String StreamDescriptionProperty

Имя свойства для описания потока, используемого для инициализации документа. Это следует использовать, если документ был инициализирован из потока и что-то известно о потоке.

См. также:
Значения константных полей

TitleProperty

static final String TitleProperty

Имя свойства для заголовка документа, если он есть.

См. также:
Значения константных полей

Методы

getLength

int getLength()

Возвращает количество символов содержимого, в настоящее время находящегося в документе.

Возвращает:
количество символов >= 0

addDocumentListener

void addDocumentListener(DocumentListener listener)

Регистрирует заданного наблюдателя для начала получения уведомлений при внесении изменений в документ.

Параметры:
listener - наблюдатель для регистрации
См. также:
removeDocumentListener(javax.swing.event.DocumentListener)

removeDocumentListener

void removeDocumentListener(DocumentListener listener)

Удаляет заданного наблюдателя из списка уведомлений, чтобы он больше не получал обновлений о внесении изменений.

Параметры:
listener - наблюдатель для регистрации
См. также:
addDocumentListener(javax.swing.event.DocumentListener)

addUndoableEditListener

void addUndoableEditListener(UndoableEditListener listener)

Регистрирует заданного наблюдателя для начала получения уведомлений при выполнении отменяемых изменений в документе.

Параметры:
listener - наблюдатель для регистрации
См. также:
UndoableEditEvent

removeUndoableEditListener

void removeUndoableEditListener(UndoableEditListener listener)

Удаляет заданного наблюдателя из списка уведомлений, чтобы он больше не получал обновлений.

Параметры:
listener - наблюдатель для регистрации
См. также:
UndoableEditEvent

getProperty

Object getProperty(Object key)

Получает свойства, связанные с документом.

Параметры:
key - ключ свойства, не являющегося null
Возвращает:
свойства
См. также:
putProperty(Object, Object)

putProperty

void putProperty(Object key,
                 Object value)

Связывает свойство с документом. Два стандартных ключа свойств: StreamDescriptionProperty и TitleProperty. Также могут быть определены другие свойства, такие как автор.

Параметры:
key - ключ свойства, не являющегося null
value - значение свойства
См. также:
getProperty(Object)

remove

void remove(int offs,
            int len)
     throws BadLocationException

Удаляет часть содержимого документа. Это приведет к отправке DocumentEvent типа DocumentEvent.EventType.REMOVE зарегистрированным DocumentListeners, если не произойдет исключение. Уведомление будет отправлено слушателям, вызвав метод removeUpdate на DocumentListeners.

Для обеспечения разумного поведения в условиях конкурентного доступа, событие отправляется после того, как произошло изменение. Это означает, что к тому времени, когда будет отправлено уведомление об удалении, документ уже будет обновлен, и любые метки, созданные createPosition, уже будут изменены. При удалении конец диапазона удаления сворачивается до начала диапазона, а любые метки в диапазоне удаления сворачиваются до начала диапазона.

Diagram shows removal of 'quick' from 'The quick brown fox.'

Если структура документа изменилась в результате удаления, подробности о том, какие элементы были вставлены и удалены в ответ на изменение, также будут содержаться в сгенерированном DocumentEvent. Реализация документа решает, как структура должна измениться в ответ на удаление.

Если документ поддерживает отмену/повтор, также будет сгенерировано UndoableEditEvent.

Параметры:
offs - смещение от начала >= 0
len - количество символов для удаления >= 0
Исключения:
BadLocationException - некоторая часть диапазона удаления не являлась допустимой частью документа. Расположение в исключении - это первая встретившаяся недопустимая позиция.
См. также:
DocumentEvent, DocumentListener, UndoableEditEvent, UndoableEditListener

insertString

void insertString(int offset,
                  String str,
                  AttributeSet a)
           throws BadLocationException

Вставляет строку содержимого. Это приведет к отправке DocumentEvent типа DocumentEvent.EventType.INSERT зарегистрированным DocumentListers, если не произойдет исключение. DocumentEvent будет доставлен, вызвав метод insertUpdate на DocumentListener. Смещение и длина сгенерированного DocumentEvent укажут, какое изменение фактически было внесено в документ.

Diagram shows insertion of 'quick' in 'The quick brown fox'

Если структура документа изменилась в результате вставки, подробности о том, какие элементы были вставлены и удалены в ответ на изменение, также будут содержаться в сгенерированном DocumentEvent. Реализация документа решает, как структура должна измениться в ответ на вставку.

Если документ поддерживает отмену/повтор, также будет сгенерировано UndoableEditEvent.

Параметры:
offset - смещение в документе для вставки содержимого >= 0. Все позиции, отслеживающие изменение в или после данного местоположения, будут перемещены.
str - строка для вставки
a - атрибуты для связывания с вставляемым содержимым. Может быть null, если атрибутов нет.
Исключения:
BadLocationException - заданная позиция вставки не является допустимой позицией в документе
См. также:
DocumentEvent, DocumentListener, UndoableEditEvent, UndoableEditListener

getText

String getText(int offset,
               int length)
        throws BadLocationException

Извлекает текст, содержащийся в заданной части документа.

Параметры:
offset - смещение в документе, представляющее желаемый начальный текст >= 0
length - длина желаемой строки >= 0
Возвращает:
текст, в строке длиной >= 0
Исключения:
BadLocationException - некоторая часть заданного диапазона не являлась допустимой частью документа. Расположение в исключении - это первая встретившаяся недопустимая позиция.

getText

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 someting with text
       nleft -= text.count;
       offs += text.count;
   }
Параметры:
offset - смещение в документе, представляющее желаемый начальный текст >= 0
length - длина желаемой строки >= 0
txt - объект Segment для возврата текста
Исключения:
BadLocationException - часть заданного диапазона не являлась допустимой частью документа. Расположение в исключении - это первая встретившаяся недопустимая позиция.

getStartPosition

Position getStartPosition()

Возвращает позицию, представляющую начало документа. Возвращаемая позиция может отслеживать изменения и оставаться в начале документа.

Возвращает:
позицию

getEndPosition

Position getEndPosition()

Возвращает позицию, представляющую конец документа. Возвращаемая позиция может отслеживать изменения и оставаться в конце документа.

Возвращает:
позицию

createPosition

Position createPosition(int offs)
                 throws BadLocationException

Этот метод позволяет приложению отметить место в последовательности символьного содержимого. Эта метка может использоваться для отслеживания изменений при вставках и удалениях в содержимом. Правило заключается в том, что вставки всегда происходят до текущей позиции (наиболее распространенный случай), если только позиция вставки не равна нулю, в этом случае вставка принудительно переносится в позицию, следующую за исходной позицией.

Параметры:
offs - смещение от начала документа >= 0
Возвращает:
позицию
Исключения:
BadLocationException - если заданная позиция не представляет допустимое местоположение в связанном документе

getRootElements

Element[] getRootElements()

Возвращает все определенные корневые элементы.

Обычно существует только одна структура документа, но интерфейс поддерживает построение произвольного количества структурных проекций над текстовыми данными. Документ может иметь несколько корневых элементов для поддержки нескольких структур документа. Примеры могут быть:

  • Направление текста.
  • Потоки лексических токенов.
  • Деревья разбора.
  • Преобразования в форматы, отличные от исходного.
  • Спецификации изменений.
  • Аннотации.
Возвращает:
корневой элемент

getDefaultRootElement

Element getDefaultRootElement()

Возвращает корневой элемент, на основе которого должны базироваться представления, если не предоставлен иной механизм для назначения представлений структурам элементов.

Возвращает:
корневой элемент

render

void render(Runnable r)

Позволяет безопасно отображать модель в условиях одновременного доступа, если модель поддерживает асинхронное обновление. Заданный Runnable будет выполнен таким образом, чтобы безопасно считывать модель без изменений во время выполнения Runnable. Сам Runnable не должен вносить изменений.

Параметры:
r - Runnable для отображения модели

© 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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/swing/text/Document.html

Spec-Zone .ru
спецификации, руководства, описания, API