Класс HTMLDocument
- java.lang.Object
-
- javax.swing.text.AbstractDocument
-
- javax.swing.text.DefaultStyledDocument
-
- javax.swing.text.html.HTMLDocument
- Все реализованные интерфейсы:
-
Serializable,Document,StyledDocument
public class HTMLDocument extends DefaultStyledDocument
Документ, моделирующий HTML. Цель этой модели — поддержка как просмотра, так и редактирования. В результате структура, описываемая HTML-документом, по умолчанию не точно воспроизводится. Структура элементов, которая моделируется по умолчанию, создаётся классом HTMLDocument.HTMLReader, который реализует протокол HTMLEditorKit.ParserCallback, ожидаемый анализатором. Для изменения структуры можно наследовать класс HTMLReader, и переопределить метод getReader(int) для возврата нового реализованного объекта-ридера. Для получения подробностей о создаваемой по умолчанию структуре необходимо обратиться к документации по HTMLReader. Цель состоит в том, чтобы документ был без потерь (хотя воспроизведение формата HTML может привести к другому формату).
Документ моделирует только HTML и не пытается хранить атрибуты представления в нём. Элементы идентифицируются атрибутом StyleContext.NameAttribute, значение которого всегда должно быть типа HTML.Tag, идентифицирующего тип элемента. Некоторые элементы (например, комментарии) синтезируются. HTMLFactory использует этот атрибут для определения типа представления, которое следует создать.
Этот документ поддерживает инкрементальную загрузку. Свойство TokenThreshold управляет тем, какой объём парсинга буферизуется перед попыткой обновления структуры элементов документа. Это свойство устанавливается EditorKit, чтобы дочерние классы могли его отключить.
Свойство Base определяет URL, относительно которого разрешаются относительные URL-адреса. По умолчанию это будет Document.StreamDescriptionProperty, если значение свойства — URL. Если встречается тэг <BASE>, база станет URL, указанным в этом тэге. Поскольку базовый URL является свойством, его, конечно, можно установить напрямую.
Стандартный механизм хранения содержимого для этого документа — буфер с разрывами (GapContent). Альтернативные механизмы могут быть предоставлены с помощью конструктора, принимающего реализацию Content.
Изменение HTMLDocument
Помимо методов, предоставляемых объектом Document и StyledDocument для изменения HTMLDocument, HTMLDocument предоставляет ряд удобных методов. Следующие методы можно использовать для вставки HTML-содержимого в существующий документ.
setInnerHTML(Element, String)setOuterHTML(Element, String)insertBeforeStart(Element, String)insertAfterStart(Element, String)insertBeforeEnd(Element, String)insertAfterEnd(Element, String)
Следующие примеры иллюстрируют использование этих методов. Каждый пример предполагает, что HTML-документ инициализирован следующим образом:
JEditorPane p = new JEditorPane();
p.setContentType("text/html");
p.setText("..."); // Document text is provided below.
HTMLDocument d = (HTMLDocument) p.getDocument(); С следующим HTML-содержимым:
<html>
<head>
<title>An example HTMLDocument</title>
<style type="text/css">
div { background-color: silver; }
ul { color: blue; }
</style>
</head>
<body>
<div id="BOX">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</div>
</body>
</html> Все методы изменения HTML-документа требуют Element. Элементы можно получить из HTML-документа, используя метод getElement(Element e, Object attribute, Object
value). Он возвращает первый дочерний элемент, содержащий указанный атрибут со значением, в порядке обхода в глубину. Например, d.getElement(d.getDefaultRootElement(),
StyleConstants.NameAttribute, HTML.Tag.P) возвращает первый элемент абзаца.
Удобный ярлык для поиска элементов — метод getElement(String); возвращает элемент, чей атрибут ID соответствует заданному значению. Например, d.getElement("BOX") возвращает элемент DIV.
Метод getIterator(HTML.Tag t) также может использоваться для поиска всех вхождений указанного HTML-тега в документе.
Вставка элементов
Элементы можно вставлять перед или после существующих дочерних элементов любого элемента, не являющегося листом, используя методы insertAfterStart и insertBeforeEnd. Например, если e — это элемент DIV, d.insertAfterStart(e, "<ul><li>List
Item</li></ul>") вставляет список перед первым абзацем, а d.insertBeforeEnd(e, "<ul><li>List
Item</li></ul>") вставляет список после последнего абзаца. Блок DIV становится родителем вновь вставленных элементов.
Элементы-сиблинги можно вставить перед или после любого элемента, используя методы insertBeforeStart и insertAfterEnd. Например, если e — это элемент DIV, d.insertBeforeStart(e,
"<ul><li>List Item</li></ul>") вставляет список перед элементом DIV, а d.insertAfterEnd(e,
"<ul><li>List Item</li></ul>") вставляет список после элемента DIV. Новые вставленные элементы становятся сиблингами элемента DIV.
Замена элементов
Элементы и все их потомки могут быть заменены с помощью методов setInnerHTML и setOuterHTML. Например, если e — это элемент DIV, d.setInnerHTML(e, "<ul><li>List
Item</li></ul>") заменяет все дочерние абзацы списком, а d.setOuterHTML(e, "<ul><li>List
Item</li></ul>") заменяет сам элемент DIV. В последнем случае родителем списка является элемент BODY.
Резюме
В следующей таблице показан пример документа и результаты различных методов, описанных выше.
| Пример | insertAfterStart | insertBeforeEnd | insertBeforeStart | insertAfterEnd | setInnerHTML | setOuterHTML |
|---|---|---|---|---|---|---|
| Абзац 1 Абзац 2 |
Абзац 1 Абзац 2 | Абзац 1 Абзац 2
|
Абзац 1 Абзац 2 | Абзац 1 Абзац 2
|
|
|
Предупреждение: Сериализованные объекты этого класса не будут совместимы с будущими версиями Swing. Текущая поддержка сериализации подходит для краткосрочного хранения или RMI между приложениями, использующими одну и ту же версию Swing. Начиная с версии 1.4, поддержка долгосрочного хранения всех JavaBeans™ была добавлена в пакет java.beans. Обратитесь к XMLEncoder.
- См. также:
- Сериализованная форма
Вложенные классы
| Модификатор и тип | Класс | Описание |
|---|---|---|
class | HTMLDocument.BlockElement | Элемент, представляющий структурный блок HTML. |
class | HTMLDocument.HTMLReader | HTML-ридер для загрузки HTML-документа со структурой HTML-элементов. |
static class | HTMLDocument.Iterator | Итератор для итерации по определённому типу тега. |
class | HTMLDocument.RunElement | Элемент, представляющий фрагмент текста, которому назначен набор атрибутов HTML на уровне символов. |
Вложенные классы/интерфейсы, объявленные в классе javax.swing.text.DefaultStyledDocument
DefaultStyledDocument.AttributeUndoableEdit, DefaultStyledDocument.ElementBuffer, DefaultStyledDocument.ElementSpec, DefaultStyledDocument.SectionElement Вложенные классы/интерфейсы, объявленные в классе javax.swing.text.AbstractDocument
AbstractDocument.AbstractElement, AbstractDocument.AttributeContext, AbstractDocument.BranchElement, AbstractDocument.Content, AbstractDocument.DefaultDocumentEvent, AbstractDocument.ElementEdit, AbstractDocument.LeafElement Поля
| Модификатор и тип | Поле | Описание |
|---|---|---|
static String | AdditionalComments | Значение ключа свойства документа. |
Поля, объявленные в классе javax.swing.text.DefaultStyledDocument
buffer, BUFFER_SIZE_DEFAULT Поля, объявленные в классе javax.swing.text.AbstractDocument
BAD_LOCATION, BidiElementName, ContentElementName, ElementNameAttribute, listenerList, ParagraphElementName, SectionElementName Поля, объявленные в интерфейсе javax.swing.text.Document
StreamDescriptionProperty, TitleProperty Конструкторы
| Конструктор | Описание |
|---|---|
HTMLDocument() | Создаёт HTML-документ, используя размер буфера по умолчанию и стандартную реализацию |
HTMLDocument(AbstractDocument.Content c,
StyleSheet styles) | Создаёт HTML-документ с заданной реализацией хранения содержимого и заданным механизмом хранения стилей/атрибутов. |
HTMLDocument(StyleSheet styles) | Создаёт HTML-документ с реализацией хранения содержимого по умолчанию и заданным механизмом хранения стилей/атрибутов. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected void | create(DefaultStyledDocument.ElementSpec[] data) | Заменяет содержимое документа указанными спецификациями элементов. |
protected Element | createBranchElement(Element parent,
AttributeSet a) | Создаёт элемент ветви документа, который может содержать другие элементы. |
protected AbstractDocument.AbstractElement | createDefaultRoot() | Создаёт корневой элемент для представления структуры документа по умолчанию. |
protected Element | createLeafElement(Element parent,
AttributeSet a,
int p0,
int p1) | Создаёт элемент листа документа, который напрямую представляет текст (не имеет дочерних элементов). |
protected void | fireChangedUpdate(DocumentEvent e) | Уведомляет всех слушателей, которые проявили интерес к уведомлениям об этом типе события. |
protected void | fireUndoableEditUpdate(UndoableEditEvent e) | Уведомляет всех слушателей, которые проявили интерес к уведомлениям об этом типе события. |
URL | getBase() | Возвращает расположение для разрешения относительных URL-адресов. |
Element | getElement(String id) | Возвращает элемент с заданным идентификатором |
Element | getElement(Element e,
Object attribute,
Object value) | Возвращает дочерний элемент |
HTMLDocument.Iterator | getIterator(HTML.Tag t) | Извлекает итератор для указанного тега HTML. |
HTMLEditorKit.Parser | getParser() | Возвращает парсер, используемый при вставке HTML в существующий документ. |
boolean | getPreservesUnknownTags() | Возвращает поведение, которое парсер наблюдает при обнаружении неизвестных тегов. |
HTMLEditorKit.ParserCallback | getReader(int pos) | Извлекает читатель для парсера, который используется при загрузке документа с HTML. |
HTMLEditorKit.ParserCallback | getReader(int pos,
int popDepth,
int pushDepth,
HTML.Tag insertTag) | Возвращает читатель для парсера, который используется для загрузки документа с HTML. |
StyleSheet | getStyleSheet() | Извлекает |
int | getTokenThreshold() | Получает количество токенов для буферизации перед попыткой обновления структуры элементов документа. |
protected void | insert(int offset,
DefaultStyledDocument.ElementSpec[] data) | Вставляет новые элементы в пакетном режиме. |
void | insertAfterEnd(Element elem,
String htmlText) | Вставляет HTML, заданный как строка, после конца указанного элемента. |
void | insertAfterStart(Element elem,
String htmlText) | Вставляет HTML, заданный как строка, в начале элемента. |
void | insertBeforeEnd(Element elem,
String htmlText) | Вставляет HTML, заданный как строка, в конце элемента. |
void | insertBeforeStart(Element elem,
String htmlText) | Вставляет HTML, заданный как строка, перед началом указанного элемента. |
protected void | insertUpdate(AbstractDocument.DefaultDocumentEvent chng,
AttributeSet attr) | Обновляет структуру документа в результате вставки текста. |
void | processHTMLFrameHyperlinkEvent(HTMLFrameHyperlinkEvent e) | Обрабатывает |
void | setBase(URL u) | Устанавливает расположение для разрешения относительных URL-адресов. |
void | setInnerHTML(Element elem,
String htmlText) | Заменяет дочерние элементы указанного элемента содержимым, заданным как строка HTML. |
void | setOuterHTML(Element elem,
String htmlText) | Заменяет указанный элемент в родительском элементе содержимым, заданным как строка HTML. |
void | setParagraphAttributes(int offset,
int length,
AttributeSet s,
boolean replace) | Устанавливает атрибуты для абзаца. |
void | setParser(HTMLEditorKit.Parser parser) | Устанавливает парсер, используемый методами, которые вставляют HTML в существующий документ, такие как |
void | setPreservesUnknownTags(boolean preservesTags) | Определяет, как парсер обрабатывает неизвестные теги. |
void | setTokenThreshold(int n) | Устанавливает количество токенов для буферизации перед попыткой обновления структуры элементов документа. |
Методы, объявленные в классе javax.swing.text.DefaultStyledDocument
addDocumentListener, addStyle, getBackground, getCharacterElement, getDefaultRootElement, getFont, getForeground, getLogicalStyle, getParagraphElement, getStyle, getStyleNames, removeDocumentListener, removeElement, removeStyle, removeUpdate, setCharacterAttributes, setLogicalStyle, styleChanged Методы, объявленные в классе javax.swing.text.AbstractDocument
addUndoableEditListener, createPosition, dump, fireInsertUpdate, fireRemoveUpdate, getAsynchronousLoadPriority, getAttributeContext, getBidiRootElement, getContent, getCurrentWriter, getDocumentFilter, getDocumentListeners, getDocumentProperties, getEndPosition, getLength, getListeners, getProperty, getRootElements, getStartPosition, getText, getText, getUndoableEditListeners, insertString, postRemoveUpdate, putProperty, readLock, readUnlock, remove, removeUndoableEditListener, render, replace, setAsynchronousLoadPriority, setDocumentFilter, setDocumentProperties, writeLock, writeUnlock Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Методы, объявленные в интерфейсе javax.swing.text.Document
addUndoableEditListener, createPosition, getEndPosition, getLength, getProperty, getRootElements, getStartPosition, getText, getText, insertString, putProperty, remove, removeUndoableEditListener, render Поля
AdditionalComments
public static final String AdditionalComments
Значение ключа свойства документа. Значение для ключа будет являться вектором строк, которые представляют собой комментарии, отсутствующие в теле.
- См. также:
- Постоянные значения полей
Конструкторы
HTMLDocument
public HTMLDocument()
Создаёт документ HTML с использованием размера буфера по умолчанию и StyleSheet по умолчанию. Это удобный метод для конструктора HTMLDocument(Content, StyleSheet).
HTMLDocument
public HTMLDocument(StyleSheet styles)
Создаёт документ HTML с реализацией хранения содержимого по умолчанию и указанным механизмом хранения стилей/атрибутов. Это удобный метод для конструктора HTMLDocument(Content, StyleSheet).
- Параметры:
-
styles- стили
HTMLDocument
public HTMLDocument(AbstractDocument.Content c,
StyleSheet styles) Создаёт документ HTML с заданной реализацией хранения содержимого и заданным механизмом хранения стилей/атрибутов.
- Параметры:
-
c- контейнер для содержимого -
styles- стили
Методы
getReader
public HTMLEditorKit.ParserCallback getReader(int pos)
Получает ридер для использования анализатором при загрузке документа с HTML. Реализовано для возврата экземпляра HTMLDocument.HTMLReader. Подклассы могут переопределить этот метод, чтобы изменить структуру документа по желанию. (Например, для обработки пользовательских тегов или структурного представления элементов стиля символов.)
- Параметры:
-
pos- начальная позиция - Возвращает:
- ридер, используемый анализатором для загрузки документа
getReader
public HTMLEditorKit.ParserCallback getReader(int pos,
int popDepth,
int pushDepth,
HTML.Tag insertTag) Возвращает ридер для использования анализатором при загрузке документа с HTML. Реализовано для возврата экземпляра HTMLDocument.HTMLReader. Подклассы могут переопределить этот метод, чтобы изменить структуру документа по желанию. (Например, для обработки пользовательских тегов или структурного представления элементов стиля символов.)
Это удобный метод для getReader(int, int, int, HTML.Tag, TRUE).
- Параметры:
-
pos- начальная позиция -
popDepth- количествоElementSpec.EndTagTypesдля генерации перед вставкой -
pushDepth- количествоElementSpec.StartTagTypesс направлениемElementSpec.JoinNextDirection, которое должно быть сгенерировано перед вставкой, но после генерации закрывающих тегов -
insertTag- первый тег для начала вставки в документ - Возвращает:
- ридер, используемый анализатором для загрузки документа
getBase
public URL getBase()
Возвращает расположение для разрешения относительных URL-адресов. По умолчанию это URL-адрес документа, если документ загружен из URL-адреса. Если найден и может быть проанализирован тег base, он будет использован в качестве базового расположения.
- Возвращает:
- базовое расположение
setBase
public void setBase(URL u)
Устанавливает расположение для разрешения относительных URL-адресов. По умолчанию это URL-адрес документа, если документ загружен из URL-адреса. Если найден и может быть проанализирован тег base, он будет использован в качестве базового расположения.
Это также устанавливает базу StyleSheet в u, а также базу документа.
- Параметры:
-
u- желаемый базовый URL
insert
protected void insert(int offset,
DefaultStyledDocument.ElementSpec[] data)
throws BadLocationException Вставляет новые элементы в пакет. Вот как создаются элементы в документе. Анализ определяет необходимую структуру и создает спецификацию в виде набора токенов, описывающих редактирование, оставляя документ свободным от блокировки записи. Этот метод затем может вызываться порциями ридером для получения блокировки записи на более короткий период (например, пока документ фактически не изменяется).
- Переопределяет:
-
insertв классеDefaultStyledDocument - Параметры:
-
offset- начальный смещение -
data- данные элемента - Исключения:
-
BadLocationException- если заданная позиция не представляет допустимое местоположение в связанном документе.
insertUpdate
protected void insertUpdate(AbstractDocument.DefaultDocumentEvent chng,
AttributeSet attr) Обновляет структуру документа в результате вставки текста. Это произойдет в пределах блокировки записи. Эта реализация просто анализирует вставленное содержимое на предмет разрывов строк и создает набор инструкций для буфера элементов.
- Переопределяет:
-
insertUpdateв классеDefaultStyledDocument - Параметры:
-
chng- описание изменения документа -
attr- атрибуты
create
protected void create(DefaultStyledDocument.ElementSpec[] data)
Заменяет содержимое документа заданными спецификациями элементов. Вызывается перед вставкой, если загрузка выполняется порциями. Это единственный метод, который вызывается при полной загрузке документа в один поток.
- Переопределяет:
-
createв классеDefaultStyledDocument - Параметры:
-
data- новое содержимое документа
setParagraphAttributes
public void setParagraphAttributes(int offset,
int length,
AttributeSet s,
boolean replace) Устанавливает атрибуты абзаца.
Этот метод потокобезопасен, хотя большинство методов Swing не являются таковыми. Подробнее см. Асинхронность в Swing.
- Определено в:
-
setParagraphAttributesв интерфейсеStyledDocument - Переопределяет:
-
setParagraphAttributesв классеDefaultStyledDocument - Параметры:
-
offset- смещение в абзаце (должно быть не меньше 0) -
length- количество затронутых символов (должно быть не меньше 0) -
s- атрибуты -
replace- заменить существующие атрибуты или объединить их
getStyleSheet
public StyleSheet getStyleSheet()
Получает StyleSheet со специфическими для документа правилами отображения (CSS), которые были указаны в самом HTML-документе.
- Возвращает:
StyleSheet
getIterator
public HTMLDocument.Iterator getIterator(HTML.Tag t)
Получает итератор для указанного HTML-тега. Это может использоваться для таких операций, как итерация по набору якорей или итерация по элементам ввода.
- Параметры:
-
t- запрашиваемыйHTML.Tag - Возвращает:
Iteratorдля данного HTML-тега- См. также:
HTML.Tag
createLeafElement
protected Element createLeafElement(Element parent,
AttributeSet a,
int p0,
int p1) Создает элемент листа документа, который напрямую представляет текст (не имеет дочерних элементов). Реализовано для возврата элемента типа HTMLDocument.RunElement.
- Переопределяет:
-
createLeafElementв классеAbstractDocument - Параметры:
-
parent- родительский элемент -
a- атрибуты для элемента -
p0- начало диапазона (должно быть не меньше 0) -
p1- конец диапазона (должно быть не меньше p0) - Возвращает:
- новый элемент
createBranchElement
protected Element createBranchElement(Element parent,
AttributeSet a) Создает элемент ветви документа, который может содержать другие элементы. Реализовано для возврата элемента типа HTMLDocument.BlockElement.
- Переопределяет:
-
createBranchElementв классеAbstractDocument - Параметры:
-
parent- родительский элемент -
a- атрибуты - Возвращает:
- элемент
createDefaultRoot
protected AbstractDocument.AbstractElement createDefaultRoot()
Создает корневой элемент, используемый для представления стандартной структуры документа.
- Переопределяет:
-
createDefaultRootв классеDefaultStyledDocument - Возвращает:
- базовый элемент
setTokenThreshold
public void setTokenThreshold(int n)
Устанавливает количество токенов для буферизации перед попыткой обновления структуры элементов документов.
- Параметры:
-
n- количество токенов для буферизации
getTokenThreshold
public int getTokenThreshold()
Возвращает количество токенов для буферизации перед попыткой обновления структуры элементов документов. Значение по умолчанию - Integer.MAX_VALUE.
- Возвращает:
- количество токенов для буферизации
setPreservesUnknownTags
public void setPreservesUnknownTags(boolean preservesTags)
Определяет, как обрабатываются неизвестные теги анализатором. Если установлено в true, неизвестные теги помещаются в модель, в противном случае они отбрасываются.
- Параметры:
-
preservesTags- true, если неизвестные теги должны сохраняться в модели, в противном случае теги отбрасываются - См. также:
HTML.Tag
getPreservesUnknownTags
public boolean getPreservesUnknownTags()
Возвращает поведение анализатора при обнаружении неизвестных тегов.
- Возвращает:
- true, если неизвестные теги должны сохраняться при анализе
- См. также:
HTML.Tag
processHTMLFrameHyperlinkEvent
public void processHTMLFrameHyperlinkEvent(HTMLFrameHyperlinkEvent e)
Обрабатывает HyperlinkEvents, генерируемые документами в HTML-рамке. Тип HyperlinkEvent, как предполагает параметр, - HTMLFrameHyperlinkEvent. В дополнение к обычной информации, содержащейся в HyperlinkEvent, это событие содержит элемент, соответствующий рамке, в которой произошел клик (элемент источника), и имя назначения. Имя назначения может иметь 4 возможных значения:
- _self
- _parent
- _top
- имя рамки
HTML.Attribute.SRC и срабатывании события ChangedUpdate.
Если target - _parent, то он удаляет родительский элемент, который является элементом <FRAMESET>, и вставляет новый элемент <FRAME> и устанавливает атрибут HTML.Attribute.SRC со значением, равным целевому URL-адресу, и срабатывает события RemovedUpdate и InsertUpdate.
Если target - _top, этот метод ничего не делает. Обработка _top выполняется в реализации представления для рамки, а именно в FrameView. Учитывая, что _top подразумевает замену всего документа, обработку этого целесообразно выполнять вне документа, который он заменит.
Если target - имя рамки, то иерархия элементов проверяется на предмет элемента с именем, равным target, атрибут HTML.Attribute.SRC обновляется и срабатывает событие ChangedUpdate.
- Параметры:
-
e- событие
setParser
public void setParser(HTMLEditorKit.Parser parser)
Устанавливает анализатор, используемый методами, которые вставляют html в существующий документ, например, setInnerHTML, и setOuterHTML.
HTMLEditorKit.createDefaultDocument установит для вас анализатор. Если вы создаете HTMLDocument вручную, убедитесь, что установили анализатор соответствующим образом.
- Параметры:
-
parser- анализатор, используемый для вставки текста - С:
- 1.3
getParser
public HTMLEditorKit.Parser getParser()
Возвращает парсер, который используется при вставке HTML в существующий документ.
- Возвращает:
- используемый для вставки текста парсер
- С:
- 1.3
setInnerHTML
public void setInnerHTML(Element elem,
String htmlText)
throws BadLocationException,
IOException Заменяет потомков заданного элемента содержимым, указанным в виде HTML-строки.
Это будет восприниматься как минимум как два события, n вставок, за которыми следует удаление.
Рассмотрим следующую структуру (параметр elem выделен жирным шрифтом).
<body>
|
<div>
/ \
<p> <p> Вызов setInnerHTML(elem, "<ul><li>") приводит к следующей структуре (новые элементы выделены синим цветом).
<body>
|
<div>
\
<ul>
\
<li> Параметр elem не должен быть листом, в противном случае будет брошено исключение IllegalArgumentException. Если параметр elem или htmlText имеет значение null, изменения в документе не будут внесены.
Для корректной работы документ должен иметь установленный HTMLEditorKit.Parser. Это будет так, если документ был создан из HTMLEditorKit с помощью метода createDefaultDocument.
- Параметры:
-
elem- элемент ветви, чьи потомки будут заменены -
htmlText- строка, которая будет обработана и назначена элементуelem - Исключения:
-
IllegalArgumentException- еслиelemявляется листом -
IllegalStateException- если не заданHTMLEditorKit.Parser -
BadLocationException- если замена невозможна из-за проблем со структурой -
IOException- если произошла ошибка ввода-вывода - С:
- 1.3
setOuterHTML
public void setOuterHTML(Element elem,
String htmlText)
throws BadLocationException,
IOException Заменяет заданный элемент в родительском элементе содержимым, указанным в виде HTML-строки.
Это будет восприниматься как минимум как два события, n вставок, за которыми следует удаление.
При замене листа будет проверяться наличие новой строки, если она нужна. Это может привести к вставке дополнительного элемента. Представьте, что вы заменяете элемент символа, содержащий новую строку, на <img>. Это создаст два элемента: один для изображения и один для новой строки.
Если вы пытаетесь заменить элемент на весь его размер, то, скорее всего, получите два элемента, например setOuterHTML(getCharacterElement (getLength()),
"blah") приведет к двум листовым элементам в конце: один представляющий 'blah', а другой – конечный элемент.
Рассмотрим следующую структуру (параметр elem выделен жирным шрифтом).
<body>
|
<div>
/ \
<p> <p> Вызов setOuterHTML(elem, "<ul><li>") приводит к следующей структуре (новые элементы выделены синим цветом).
<body>
|
<ul>
\
<li> Если параметр elem или htmlText имеет значение null, изменения в документе не будут внесены.
Для корректной работы документ должен иметь установленный HTMLEditorKit.Parser. Это будет так, если документ был создан из HTMLEditorKit с помощью метода createDefaultDocument.
- Параметры:
-
elem- элемент для замены -
htmlText- строка, которая будет обработана и вставлена вместоelem - Исключения:
-
IllegalStateException- если HTMLEditorKit.Parser не задан -
BadLocationException- если замена невозможна из-за проблем со структурой -
IOException- если произошла ошибка ввода-вывода - С:
- 1.3
insertAfterStart
public void insertAfterStart(Element elem,
String htmlText)
throws BadLocationException,
IOException Вставляет HTML, указанный в виде строки, в начало элемента.
Рассмотрим следующую структуру (параметр elem выделен жирным шрифтом).
<body>
|
<div>
/ \
<p> <p> Вызов insertAfterStart(elem,
"<ul><li>") приводит к следующей структуре (новые элементы выделены синим цветом).
<body>
|
<div>
/ | \
<ul> <p> <p>
/
<li> В отличие от метода insertBeforeStart, новые элементы становятся потомками указанного элемента, а не его братьями.
Параметр elem не должен быть листом, в противном случае будет брошено исключение IllegalArgumentException. Если параметр elem или htmlText имеет значение null, изменения в документе не будут внесены.
Для корректной работы документ должен иметь установленный HTMLEditorKit.Parser. Это будет так, если документ был создан из HTMLEditorKit с помощью метода createDefaultDocument.
- Параметры:
-
elem- элемент ветви, который будет корнем для нового текста -
htmlText- строка, которая будет обработана и назначена элементуelem - Исключения:
-
IllegalArgumentException- еслиelemявляется листом -
IllegalStateException- если на документе не задан HTMLEditorKit.Parser -
BadLocationException- если вставка невозможна из-за проблемы со структурой -
IOException- если произошла ошибка ввода-вывода - С:
- 1.3
insertBeforeEnd
public void insertBeforeEnd(Element elem,
String htmlText)
throws BadLocationException,
IOException Вставляет HTML, указанный в виде строки, в конец элемента.
Если потомки elem являются листами, и символ в elem.getEndOffset() - 1 — это новая строка, вставка произойдет перед новой строкой, чтобы текст не находился после неё.
Рассмотрим следующую структуру (параметр elem выделен жирным шрифтом).
<body>
|
<div>
/ \
<p> <p> Вызов insertBeforeEnd(elem, "<ul><li>") приводит к следующей структуре (новые элементы выделены синим цветом).
<body>
|
<div>
/ | \
<p> <p> <ul>
\
<li> В отличие от метода insertAfterEnd, новые элементы становятся потомками указанного элемента, а не его братьями.
Параметр elem не должен быть листом, в противном случае будет брошено исключение IllegalArgumentException. Если параметр elem или htmlText имеет значение null, изменения в документе не будут внесены.
Для корректной работы документ должен иметь установленный HTMLEditorKit.Parser. Это будет так, если документ был создан из HTMLEditorKit с помощью метода createDefaultDocument.
- Параметры:
-
elem- элемент, который будет корнем для нового текста -
htmlText- строка, которая будет обработана и назначена элементуelem - Исключения:
-
IllegalArgumentException- еслиelemявляется листом -
IllegalStateException- если на документе не задан HTMLEditorKit.Parser -
BadLocationException- если вставка невозможна из-за проблемы со структурой -
IOException- если произошла ошибка ввода-вывода - С:
- 1.3
insertBeforeStart
public void insertBeforeStart(Element elem,
String htmlText)
throws BadLocationException,
IOException Вставляет HTML, указанный в виде строки, перед началом заданного элемента.
Рассмотрим следующую структуру (параметр elem выделен жирным шрифтом).
<body>
|
<div>
/ \
<p> <p> Вызов insertBeforeStart(elem,
"<ul><li>") приводит к следующей структуре (новые элементы выделены синим цветом).
<body>
/ \
<ul> <div>
/ / \
<li> <p> <p> В отличие от метода insertAfterStart, новые элементы становятся братьями указанного элемента, а не его потомками.
Если параметр elem или htmlText имеет значение null, изменения в документе не будут внесены.
Для корректной работы документ должен иметь установленный HTMLEditorKit.Parser. Это будет так, если документ был создан из HTMLEditorKit с помощью метода createDefaultDocument.
- Параметры:
-
elem- элемент, перед которым вставляется содержимое -
htmlText- строка, которая будет обработана и вставлена перед элементомelem - Исключения:
-
IllegalStateException- если на документе не задан HTMLEditorKit.Parser -
BadLocationException- если вставка невозможна из-за проблемы со структурой -
IOException- если произошла ошибка ввода-вывода - С:
- 1.3
insertAfterEnd
public void insertAfterEnd(Element elem,
String htmlText)
throws BadLocationException,
IOException Вставляет HTML, указанный в виде строки, после конца заданного элемента.
Рассмотрим следующую структуру (параметр elem выделен жирным шрифтом).
<body>
|
<div>
/ \
<p> <p> Вызов insertAfterEnd(elem, "<ul><li>") приводит к следующей структуре (новые элементы выделены синим цветом).
<body>
/ \
<div> <ul>
/ \ \
<p> <p> <li> В отличие от метода insertBeforeEnd, новые элементы становятся братьями указанного элемента, а не его потомками.
Если параметр elem или htmlText имеет значение null, изменения в документе не будут внесены.
Для корректной работы документ должен иметь установленный HTMLEditorKit.Parser. Это будет так, если документ был создан из HTMLEditorKit с помощью метода createDefaultDocument.
- Параметры:
-
elem- элемент, после которого вставляется содержимое -
htmlText- строка, которая будет обработана и вставлена после элементаelem - Исключения:
-
IllegalStateException- если на документе не задан HTMLEditorKit.Parser -
BadLocationException- если вставка невозможна из-за проблемы со структурой -
IOException- если произошла ошибка ввода-вывода - С:
- 1.3
getElement
public Element getElement(String id)
Возвращает элемент, у которого задан идентификатор Attribute. Если элемент не найден, возвращается null. Обратите внимание, что этот метод работает с элементом, а не с тегом символа. В следующем фрагменте HTML: <a id="HelloThere"> атрибут – 'id', а тег символа – 'a'. Это удобный метод для getElement(RootElement, HTML.Attribute.id, id). Этот метод не потокобезопасен.
- Параметры:
-
id- строка, представляющая искомыйAttribute - Возвращает:
- элемент с заданным
Attributeилиnull, если он не найден, илиnull, еслиidявляетсяnull - С:
- 1.3
- См. также:
HTML.Attribute
getElement
public Element getElement(Element e,
Object attribute,
Object value) Возвращает дочерний элемент e, содержащий атрибут attribute со значением value, или null, если такой элемент не найден. Этот метод не потокобезопасен.
- Параметры:
-
e- корневой элемент, с которого начинается поиск -
attribute- желаемыйAttribute -
value- значения для указанногоAttribute - Возвращает:
- элемент со значением указанного
Attributeи указаннымvalue, илиnullесли он не найден - С:
- 1.3
- См. также:
HTML.Attribute
fireChangedUpdate
protected void fireChangedUpdate(DocumentEvent e)
Уведомляет всех слушателей, которые зарегистрировали интерес к уведомлениям об этом типе события. Экземпляр события создаётся ленивым способом, используя параметры, переданные в метод fire.
- Переопределяет:
-
fireChangedUpdateв классеAbstractDocument - Параметры:
-
e- событие - См. также:
EventListenerList
fireUndoableEditUpdate
protected void fireUndoableEditUpdate(UndoableEditEvent e)
Уведомляет всех слушателей, которые зарегистрировали интерес к уведомлениям об этом типе события. Экземпляр события создаётся ленивым способом, используя параметры, переданные в метод fire.
- Переопределяет:
-
fireUndoableEditUpdateв классеAbstractDocument - Параметры:
-
e- событие - См. также:
EventListenerList
© 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/html/HTMLDocument.html