public interface Document
Document
контейнер для текста, который служит моделью для текстовых компонентов колебания. Цель для этого интерфейса состоит в том, чтобы масштабироваться от очень простых потребностей (текстовое поле простого текста) к сложным потребностям (HTML или XML-документ, например).
Контент
На самом простом уровне текст может быть смоделирован как линейная последовательность символов. Чтобы поддерживать интернационализацию, текстовая модель Swing использует
Чтобы обратиться к расположениям в пределах последовательности, используемые координаты являются расположением между двумя символами. Как схема ниже шоу, расположение в текстовом документе может упоминаться как позиция, или смещение. Эта позиция основана на нуле.
В примере, если контент документа является последовательностью "Быстрая коричневая лиса," как показано в предыдущей схеме, расположение непосредственно перед тем, как слово "The" 0, и расположение после слова "The" и перед пробелом, который следует, это 3. Вся последовательность символов в последовательности вызывала диапазон.
Следующие методы предоставляют доступ к символьным данным, которые составляют контент.
Структура
Текст редко представляется просто как невыразительный контент. Скорее тексту обычно связывали своего рода структуру с этим. Точно то, какая структура моделируется, до определенной реализации Документа. Это не могло бы быть столь же просто как никакая структура (то есть простое текстовое поле), или это могло бы быть что-то как схема ниже.
Модуль структуры (то есть узел дерева) упоминается интерфейсом Элемента. Каждый Элемент может быть тегирован с рядом атрибутов. Эти атрибуты (пары имя/значение) определяются интерфейсом AttributeSet.
Следующие методы предоставляют доступ к структуре документа.
Мутации
Все документы должны быть в состоянии добавить и удалить простой текст. Как правило, текст вставляется и удаляется через жесты из клавиатуры или мыши. Что эффект, который вставка или удаление имеют на структуру документа, полностью до реализации документа.
Следующие методы связываются с мутацией контента документа:
Уведомление
Мутации к Document
должен быть передан заинтересованным наблюдателям. Уведомление об изменении следует за направляющими линиями модели событий, которые определяются для JavaBeans. В модели событий JavaBeans, когда-то уведомление о событии диспетчеризируется, должны быть уведомлены все слушатели прежде, чем дальнейшие мутации происходят с источником события. Далее, порядок поставки не гарантируется.
Уведомление обеспечивается как два отдельных события, DocumentEvent, и UndoableEditEvent. Если мутация делается к a Document
через его api, a DocumentEvent
будет отправлен всем зарегистрированным DocumentListeners
. Если Document
реализация поддерживает возможности отмены/восстановления, UndoableEditEvent
будет отправлен всем зарегистрированным UndoableEditListener
s. Если невыполнимое редактирование отменяется, a DocumentEvent
должен быть запущен из Документа, чтобы указать, что он изменился снова. В этом случае однако, должен быть нет UndoableEditEvent
сгенерированный, так как то редактирование является фактически источником изменения, а не мутации к Document
сделанный через его api.
Что касается вышеупомянутой схемы, предположите, что компонент, показанный слева, видоизменяет объект документа, представленный синим прямоугольником. Документ отвечает, диспетчеризируя DocumentEvent и компоненту, просматривает и отправляет UndoableEditEvent логике слушания, которая поддерживает буфер истории.
Теперь предположите, что компонент, показанный справа, видоизменяет тот же самый документ. Снова, документ диспетчеризирует DocumentEvent и компоненту, просматривает и отправляет UndoableEditEvent логике слушания, которая поддерживает буфер истории.
Если буфер истории тогда откатывается (то есть последний отмененный UndoableEdit), DocumentEvent отправляется обоим представлениям, заставляя их обоих отразить отмененную мутацию к документу (то есть, удаление мутации правильного компонента). Если буфер истории снова откатывает другое изменение, другой DocumentEvent отправляется обоим представлениям, заставляя их отразить отмененную мутацию к документу - то есть, удаление мутации левого компонента.
Методы, связанные с наблюдением мутаций к документу:
Свойства
У реализаций документа обычно будет некоторый набор свойств связанным с ними во времени выполнения. Двумя известными свойствами является StreamDescriptionProperty, который может использоваться, чтобы описать где Document
прибыл из, и TitleProperty, который может использоваться, чтобы назвать Document
. Методы, связанные со свойствами:
Для получения дополнительной информации по Document
class, см.
Модификатор и Тип | Поле и Описание |
---|---|
static String |
StreamDescriptionProperty
Имя свойства для описания потока, используемого, чтобы инициализировать документ.
|
static String |
TitleProperty
Имя свойства для title документа, если есть тот.
|
Модификатор и Тип | Метод и Описание |
---|---|
void |
addDocumentListener(DocumentListener listener)
Регистрирует данного наблюдателя, чтобы начать получать уведомления, когда изменения производятся в документе.
|
void |
addUndoableEditListener(UndoableEditListener listener)
Регистрирует данного наблюдателя, чтобы начать получать уведомления, когда невыполнимые редактирования делаются к документу.
|
Позиция |
createPosition(int offs)
Этот метод позволяет приложению отмечать место в последовательности символьного контента.
|
Элемент |
getDefaultRootElement()
Возвращает корневой элемент, на котором представления должны быть основаны, если некоторый другой механизм для того, чтобы присвоить представления структурам элемента не обеспечивается.
|
Позиция |
getEndPosition()
Возвращает позицию, которая представляет конец документа.
|
int |
getLength()
Число возвратов символов контента в настоящий момент в документе.
|
Объект |
getProperty(Object key)
Связали свойства с документом.
|
Элемент[] |
getRootElements()
Возвраты все корневые элементы, которые определяются.
|
Позиция |
getStartPosition()
Возвращает позицию, которая представляет запуск документа.
|
Строка |
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)
Позволяет модели быть безопасно представленной в присутствии параллелизма, если модель поддерживает быть обновленным асинхронно.
|
static final String StreamDescriptionProperty
static final String TitleProperty
int getLength()
void addDocumentListener(DocumentListener listener)
listener
- наблюдатель, чтобы зарегистрироватьсяremoveDocumentListener(javax.swing.event.DocumentListener)
void removeDocumentListener(DocumentListener listener)
listener
- наблюдатель, чтобы зарегистрироватьсяaddDocumentListener(javax.swing.event.DocumentListener)
void addUndoableEditListener(UndoableEditListener listener)
listener
- наблюдатель, чтобы зарегистрироватьсяUndoableEditEvent
void removeUndoableEditListener(UndoableEditListener listener)
listener
- наблюдатель, чтобы зарегистрироватьсяUndoableEditEvent
Object getProperty(Object key)
key
- не -null
ключ свойстваputProperty(Object, Object)
void putProperty(Object key, Object value)
StreamDescriptionProperty
и TitleProperty
. Другие свойства, такие как автор, могут также быть определены.key
- не -null
ключ свойстваvalue
- значение свойстваgetProperty(Object)
void remove(int offs, int len) throws BadLocationException
Чтобы гарантировать разумное поведение перед лицом параллелизма, событие диспетчеризируется после того, как мутация произошла. Это означает, что к тому времени, когда уведомление об удалении диспетчеризируется, документ был уже обновлен и любые метки, создаваемые createPosition
уже изменились. Для удаления конец диапазона удаления сворачивается вниз к запуску диапазона, и любые метки в диапазоне удаления сворачиваются вниз к запуску диапазона.
Если структура Документа, измененная как результат удаления, детали того, какие Элементы были вставлены и удалены в ответ на изменение, будет также содержаться в сгенерированном DocumentEvent. Это до реализации Документа, чтобы решить, как структура должна измениться в ответ на удаление.
Если Документ будет поддерживать отмену/восстановление, то UndoableEditEvent будет также сгенерирован.
offs
- смещение с начала> = 0len
- число символов, чтобы удалить> = 0BadLocationException
- некоторая часть диапазона удаления не была допустимой частью документа. Расположение в исключении является первой плохой позицией, с которой встречаются.DocumentEvent
, DocumentListener
, UndoableEditEvent
, UndoableEditListener
void insertString(int offset, String str, AttributeSet a) throws BadLocationException
Если структура Документа, измененная как результат вставки, детали того, какие Элементы были вставлены и удалены в ответ на изменение, будет также содержаться в сгенерированном DocumentEvent. Это до реализации Документа, чтобы решить, как структура должна измениться в ответ на вставку.
Если Документ будет поддерживать отмену/восстановление, то UndoableEditEvent будет также сгенерирован.
offset
- смещение в документ, чтобы вставить контент> = 0. Все позиции, которые отслеживают изменение в или после данного расположения, переместятся.str
- строка, чтобы вставитьa
- атрибуты, чтобы связаться со вставленным контентом. Это может быть нулем, если нет никаких атрибутов.BadLocationException
- данная позиция вставки не является допустимой позицией в пределах документаDocumentEvent
, DocumentListener
, UndoableEditEvent
, UndoableEditListener
String getText(int offset, int length) throws BadLocationException
offset
- смещение в документ, представляющий требуемый запуск текста> = 0length
- длина требуемой строки> = 0BadLocationException
- некоторая часть данного диапазона не была допустимой частью документа. Расположение в исключении является первой плохой позицией, с которой встречаются.void getText(int offset, int length, Segment txt) throws BadLocationException
Если partialReturn свойство на txt параметре будет ложью, то данные, возвращенные в Сегменте, будут всей длиной, которую требуют, и можете, или, возможно, не копия в зависимости от того, как данные хранились. Если partialReturn свойство является истиной, только количество текста, который может быть возвращен, не создавая копию, возвращается. Используя частичные возвраты даст лучшую производительность для ситуаций, где значительные части документа сканируются. Следующее является примером использования частичного возврата, чтобы получить доступ ко всему документу:
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
- смещение в документ, представляющий требуемый запуск текста> = 0length
- длина требуемой строки> = 0txt
- объект Сегмента возвратить текст вBadLocationException
- Некоторая часть данного диапазона не была допустимой частью документа. Расположение в исключении является первой плохой позицией, с которой встречаются.Position getStartPosition()
Position getEndPosition()
Position createPosition(int offs) throws BadLocationException
offs
- смещение от запуска документа> = 0BadLocationException
- если данная позиция не представляет допустимое расположение в ассоциированном документеElement[] getRootElements()
Обычно будет только одна структура документа, но интерфейс поддерживает создание произвольного числа структурных проекций по текстовым данным. У документа могут быть многократные корневые элементы, чтобы поддерживать многократные структуры документа. Некоторые примеры могли бы быть:
Element getDefaultRootElement()
void render(Runnable r)
r
- a Runnable
используемый, чтобы представить модель
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92