Spec-Zone.ru › OpenJDK 8

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

Все известные под-интерфейсы:
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" называется диапазоном.

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

  • getLength()
  • getText(int, int)
  • getText(int, int, javax.swing.text.Segment)

Структура

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

Diagram shows Book->Chapter->Paragraph

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

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

  • getDefaultRootElement()
  • getRootElements()

Изменения

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

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

  • insertString(int, java.lang.String, javax.swing.text.AttributeSet)
  • remove(int, int)
  • createPosition(int)

Уведомления

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

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

The preceding text describes this graphic.

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

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

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

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

  • addDocumentListener(DocumentListener)
  • removeDocumentListener(DocumentListener)
  • addUndoableEditListener(UndoableEditListener)
  • removeUndoableEditListener(UndoableEditListener)

Свойства

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

  • getProperty(java.lang.Object)
  • putProperty(java.lang.Object, java.lang.Object)

Дополнительную информацию о классе Document см. на странице The Swing Connection и, в частности, статье The 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API