Spec-Zone.ru › OpenJDK 25

Интерфейс Document

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

Структура

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

Diagram shows Book->Chapter->Paragraph

Единица структуры (то есть узел дерева) обозначается интерфейсом Element. Каждому 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, всем зарегистрированным DocumentListeners отправляется DocumentEvent. Если реализация Document поддерживает отмену и повтор изменений, всем зарегистрированным UndoableEditListeners отправляется UndoableEditEvent. Если отменяемое изменение отменено, Document должен сгенерировать DocumentEvent, чтобы указать, что он снова изменился. Однако в этом случае не следует генерировать UndoableEditEvent, поскольку источником изменения является само это изменение, а не изменение, внесённое в Document через его API.

The preceding text describes this graphic.

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

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

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

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

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

Свойства

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

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

Обзор и советы по программированию

Element — важный интерфейс, используемый при создании Document. Он позволяет описывать различные структурные части документа, такие как абзацы, строки текста и даже элементы списков (в документах HTML). Концептуально интерфейс Element отражает некоторые особенности документов SGML. Поэтому, если вы знакомы с SGML, вам, возможно, уже понятны некоторые особенности интерфейса Element в Swing.

В модели документов текстового API Swing интерфейс Element определяет структурную часть Document, например абзац, строку текста или элемент списка в документе HTML.

Каждый Element является либо ветвью, либо листом. Если элемент является ветвью, метод isLeaf() возвращает false. Если элемент является листом, isLeaf() возвращает true.

У ветвей может быть любое количество дочерних элементов. У листьев дочерних элементов нет. Чтобы определить количество дочерних элементов ветви, можно вызвать getElementCount(). Чтобы определить родительский элемент Element, можно вызвать getParentElement(). У корневых элементов нет родителей, поэтому вызов getParentElement() для корневого элемента возвращает null.

Element представляет определённую область в Document, начинающуюся со startOffset и заканчивающуюся непосредственно перед endOffset. Начальное смещение элемента-ветви обычно совпадает с начальным смещением его первого дочернего элемента. Аналогично, конечное смещение элемента-ветви обычно совпадает с конечным смещением его последнего дочернего элемента.

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

Получить корневой Element (или элементы) Document можно, вызвав методы getDefaultRootElement() и getRootElements(), определённые в интерфейсе Document.

Интерфейс Document отвечает за преобразование линейного представления символов в операции Element. Определение структуры Element зависит от реализации Document.

Класс PlainDocument

Класс PlainDocument определяет структуру Element, в которой у корневого узла есть дочерний узел для каждой строки текста в модели. На рисунке 1 показано, как две строки текста будут представлены в PlainDocument.

The preceding text describes this graphic.

На рисунке 2 показано, как эти же две строки текста могут соответствовать фактическому содержимому:

The preceding text describes this graphic.

Вставка текста в PlainDocument

Как уже упоминалось, PlainDocument содержит корневой Element, который, в свою очередь, содержит Element для каждой строки текста. При вставке текста в PlainDocument он создаёт необходимые Elements, чтобы для каждого символа новой строки существовал Element. Для примера предположим, что вы хотите вставить символ новой строки со смещением 2 на рисунке 2 выше. Для этого можно использовать метод Document insertString() со следующим синтаксисом:

document.insertString(2, "\n", null);

После вызова метода insertString() структура Element будет выглядеть так, как показано на рисунке 3.

The preceding text describes this graphic.

В качестве другого примера предположим, что вы хотите вставить шаблон «new\ntext\n» со смещением 2, как показано ранее на рисунке 2. Результат этой операции показан на рисунке 4.

The preceding text describes this graphic.

На предыдущих иллюстрациях после вставки изменяются имена Elements строк, чтобы соответствовать номерам строк. Обратите внимание, что при этом AttributeSets остаются прежними. Например, на рисунке 2 AttributeSet строки 2 совпадает с AttributeSet строки 4 на рисунке 4.

Удаление текста из PlainDocument

Удаление текста приводит к изменению структуры, если удаляемый фрагмент охватывает более одной строки. Рассмотрим удаление семи символов, начиная со смещения 1, показанного ранее на рисунке 3. В этом случае Element, представляющий строку 2, полностью удаляется, так как соответствующая ему область целиком входит в удаляемый фрагмент. Elements, представляющие строки 1 и 3, объединяются, поскольку лишь частично входят в удаляемый фрагмент. В результате получаем:

The preceding text describes this graphic.

Класс DefaultStyledDocument

Класс DefaultStyledDocument, используемый для форматированного текста, содержит ещё один уровень Elements. Этот дополнительный уровень необходим, чтобы каждый абзац мог содержать текст с различными стилями. В двух абзацах, показанных на рисунке 6, первый абзац содержит два стиля, а второй — три.

The preceding text describes this graphic.

На рисунке 7 показано, как эти же Elements могут соответствовать содержимому.

The preceding text describes this graphic.

Вставка текста в DefaultStyledDocument

Как уже упоминалось, DefaultStyledDocument поддерживает структуру Element, в которой корневой Element содержит дочерний Element для каждого абзаца. В свою очередь, каждый из этих Elements абзаца содержит Element для каждого стиля текста в абзаце. Например, предположим, что у вас есть документ с одним абзацем, содержащим два стиля, как показано на рисунке 8.

The preceding text describes this graphic.

Если теперь вы захотите вставить символ новой строки со смещением 2, снова воспользуйтесь методом insertString(), как показано ниже:

 styledDocument.insertString(2, "\n",
               styledDocument.getCharacterElement(0).getAttributes());

Результат этой операции показан на рисунке 9.

The preceding text describes this graphic.

Важно отметить, что AttributeSet, переданный в insertString(), совпадает с атрибутами Style 1. Если бы AttributeSet, переданный в insertString(), не совпадал с ними, результат был бы таким, как показано на рисунке 10.

The preceding text describes this graphic.

Удаление текста из DefaultStyledDocument

Удаление текста из DefaultStyledDocument аналогично удалению текста из PlainDocument. Единственное различие — дополнительный уровень Elements. Рассмотрим, что произойдёт, если удалить два символа со смещения 1 на рисунке 10 выше. Поскольку второй Element абзаца 1 полностью входит в удаляемый фрагмент, он будет удалён. Если атрибуты первого дочернего элемента абзаца 1 совпадают с атрибутами первого дочернего элемента абзаца 2, результат будет таким, как показано на рисунке 11.

The preceding text describes this graphic.

Если атрибуты не совпадают, результат будет таким, как показано на рисунке 12.

The preceding text describes this graphic.

Класс StyledDocument

Класс StyledDocument предоставляет метод с именем setCharacterAttributes(), позволяющий задать атрибуты символьных Elements в указанном диапазоне:

 public void setCharacterAttributes
         (int offset, int length, AttributeSet s, boolean replace);

Напомним, что на диаграммах в предыдущем разделе все показанные листовые Elements также являлись символьными Elements. Это означает, что метод setCharacterAttributes() можно использовать для задания их атрибутов.

Метод setCharacterAttributes() принимает четыре аргумента. Первый и второй аргументы задают область Document, которую нужно изменить. Третий аргумент указывает новые атрибуты (в виде AttributeSet), а четвёртый определяет, нужно ли добавить новые атрибуты к существующим (значение false) или заменить существующие атрибуты символьного Element новыми (значение true).

Например, предположим, что вы хотите изменить атрибуты первых трёх символов на рисунке 9, показанном ранее. Первому и второму аргументам, переданным в setCharacterAttributes(), будут соответствовать значения 0 и 3. Третьим аргументом будет AttributeSet, содержащий новые атрибуты. В рассматриваемом примере значение четвёртого аргумента не имеет значения.

Поскольку начальное и конечное смещения изменяемой области (0 и 3) совпадают с границами символьных Elements, изменение структуры не требуется. То есть изменятся только атрибуты стиля 1 символьного Element.

Теперь рассмотрим пример, требующий изменения структуры. Вместо первых трёх символов на рисунке 9 изменим первые два. Поскольку конечное смещение изменения (2) не совпадает с границей символьного Element, Element со смещением 2 необходимо разделить так, чтобы смещение 2 стало границей двух Elements. Вызов setCharacterAttributes() с начальным смещением 0 и длиной 2 даёт результат, показанный ранее на рисунке 10.

Изменение атрибутов абзаца в StyledDocument

Класс StyledDocument предоставляет метод с именем setParagraphAttributes(), который можно использовать для изменения атрибутов Element абзаца:

 public void setParagraphAttributes
        (int offset, int length, AttributeSet s, boolean replace);

Этот метод похож на setCharacterAttributes(), но позволяет изменять атрибуты Elements абзацев. Реализация StyledDocument определяет, какие Elements считаются абзацами. DefaultStyledDocument считает Elements абзацев родительскими Elements символьных Elements. Вызов этого метода не приводит к изменению структуры; изменяются только атрибуты Element абзаца.

Рекомендуется ознакомиться с EditorKit и View. View отвечает за отображение определённого Element, а EditorKit отвечает за ViewFactory, которая определяет, какое представление следует создать для данного Element.

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

Краткое описание полей

Модификатор и тип Поле Описание
static final String StreamDescriptionProperty
Имя свойства, содержащего описание потока, использованного для инициализации документа.
static final 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(DocumentListener)

removeDocumentListener

void removeDocumentListener(DocumentListener listener)
Удаляет указанного наблюдателя из списка уведомлений, чтобы он больше не получал обновления об изменениях.
Параметры:
listener — наблюдатель для регистрации
См. также:
  • addDocumentListener(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 зарегистрированным DocumentListener, если не будет выброшено исключение. Уведомление будет отправлено слушателям посредством вызова метода removeUpdate для DocumentListener.

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

Например, если документ содержит текст «The quick brown fox», вызов remove(4, 6) удалит из текста слово «quick» и следующий за ним пробел, а все позиции в диапазоне 4–10 будут смещены к позиции 4.

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

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

Если Document поддерживает отмену и повтор, также будет создан 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 зарегистрированным DocumentListener, если не будет выброшено исключение. DocumentEvent будет доставлено посредством вызова метода insertUpdate для DocumentListener. Смещение и длина созданного DocumentEvent укажут, какое именно изменение было внесено в Document.

Например, если документ содержит текст «The brown fox», вызов insert(4, "quick ", null) вставит в текст слово «quick» и следующий за ним пробел, а все позиции начиная с 4 будут сдвинуты на 6 (количество вставленных символов).

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

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

Если Document поддерживает отмену и повтор, также будет создан 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 something 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 не должен вносить никаких изменений.
Параметры:
r — Runnable, используемый для отображения модели

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, 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/25/docs/api/java.desktop/javax/swing/text/Document.html

Spec-Zone.ru

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