Назначение элемента в Java Swing и его связь с StyledDocument и абзацами - PullRequest
3 голосов
/ 24 января 2011

Я пытаюсь понять назначение элемента и как оно может помочь с манипулированием StyledDocument , которое должно отображаться в JEditorPane или JTextPane. Я также пытаюсь понять, как это связано с понятием «параграф».

Javadoc для javax.swing.text.Element почти ничего:

открытый интерфейс Элемент

Интерфейс для описания структурной части документа. Он предназначен, чтобы уловить дух элемента SGML.

Я очень хорошо знаком с концепцией элемента в HTML и XML, и, очевидно, это что-то похожее, но я просто не вижу его цели в отношении StyledDocument. Сначала я подумал, что это просто что-то, что StyledDocument использовал внутри для управления точками остановки и начала различных стилей, но потом я увидел в Интернете примеры кода, где они использовали экземпляры Element.

У меня уже есть своя собственная древовидная структура данных, которые мне нужно отображать в разных шрифтах и ​​цветах, и при ее обходе я скажу, где изменить шрифт или цвет по мере необходимости. Похоже, я смогу удовлетворить насущную потребность с помощью серии вызовов StyledDocument.setCharacterAttributes и setParagraphAttributes , не касаясь элемента самостоятельно.

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

1 Ответ

6 голосов
/ 24 января 2011

Фактически DefaultStyledDocument - это дерево Элементов. Существуют BranchElements и LeafElements. Leaf представляет фрагмент текста с такими атрибутами текста, как размер / стиль шрифта, атрибуты цвета шрифта - жирный, курсив, подчеркивание и т. Д. BrachElement содержит элементы Leaves или другие ветви В простейшем случае ветки - это абзацы. Но корневой элемент также является экземпляром BranchElement. Все элементы могут иметь собственный набор атрибутов. Например найти цвет текста задается набор LeafElement. Если цвет не определен, задается родительский элемент листа.

Вы можете использовать это, чтобы увидеть, как Документ представлен (Модель) и Как модель представлена ​​в видах. http://java -sl.com / JEditorPaneStructureTool.html

В примере показана структура HTMLDocument, но вы также можете использовать тот же код для просмотра структуры StyledEditorKit

...