Назначение элемента в java Swing и его отношение к StyledDocument и абзацам

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

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

public interface Element

Interface to describe a structural piece of a document. It is intended to capture the spirit of an SGML element.

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

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

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


person Gigatron    schedule 24.01.2011    source источник


Ответы (1)


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

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

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

person StanislavL    schedule 24.01.2011
comment
Итак, если я вызову setParagraphAttributes, создаст ли это элемент внутри StyledDocument, чтобы отметить начальную и конечную точки абзаца? - person Gigatron; 24.01.2011
comment
Нет, абзац Элементы уже есть. Они создаются для вставленного текста. Фактически для каждого фрагмента текста, оканчивающегося на \n, создается элемент абзаца. Когда вы вызываете setParagraphAttributes(), все затронутые атрибуты элементов абзаца изменяются в соответствии с параметрами метода. Если последний параметр равен true, все старые атрибуты заменяются новыми. В противном случае заменяются только указанные атрибуты. - person StanislavL; 25.01.2011
comment
Спасибо. Мне потребуется больше времени, чтобы изучить пример по вашей ссылке и, возможно, исходный код в классах, связанных с документами Sun. - person Gigatron; 26.01.2011