Разница между классами документа - PullRequest
3 голосов
/ 24 мая 2010

Я читал javadocs, пытаясь понять API-интерфейс Swing Document, но я не могу извлечь из этого что-то осмысленное, потому что есть так много классов: Document, StyledDocument, AbstractDocument, DefaultStyledDocument, PlainDocument, HTMLDocument, а кто-то упомянул DocumentFilter. Этот вопрос носит более общий характер, поэтому кто-то может дать обзор различий между реализациями и когда нужны разные интерфейсы и рефераты?

В моем конкретном случае я хочу добиться структуры данных, которая будет:

  • содержит только три строки текста. И
  • атрибуты не должны быть в каждой строке или документе. У меня будет пара тысяч таких в какой-то другой структуре, так что
  • накладные расходы важны.

Что-нибудь, что я могу использовать для этого, или лучше что-то расширить? Если да, то что?

Ответы [ 2 ]

5 голосов
/ 24 мая 2010

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

Я включил краткое описание каждого из классов документов, которые вы запросили, в свой вопрос ниже.

Документ

Интерфейс «Документ» представляет весь документ HTML или XML.Концептуально он является корнем дерева документа и обеспечивает основной доступ к данным документа.

Это интерфейс, от которого будут наследоваться все другие типы документов.Он предоставляет контракт для всех остальных типов документов.

AbstractDocument

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

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

StyledDocument

Еще один интерфейс, обеспечивающий контракт для всех стилевых документов. DefaultStyledDocument реализует этот интерфейс, поэтому мы перейдем к следующему.

DefaultStyledDocument

Документ, который можно пометить какстили символов и абзацев аналогично формату Rich Text Format.Структура элемента для этого документа представляет пересечения стилей для прогонов стилей.Эти прогоны стилей отображаются в структуре элемента абзаца (которая может находиться в какой-то другой структуре).Стиль работает с границами абзаца, так как логические стили назначаются границам абзаца.

DefaultStyledDocument позволяет размещать специальные символы в документе, чтобы помочь с форматированием и т. Д. Подумайте о Microsoft Word, когда вы думаете оDefaultStyledDocument.

DocumentFilter

После изменения документа, содержащего DocumentFilter (либо путем вставки, либо удаления), он перенаправляет соответствующий вызов метода в DocumentFilter.

Это чрезвычайно полезный класс, который "прослушивает" события, происходящие с вашим документом (т.е. изменения), и выполняет действие при каждом событии.

PlainDocument

реализует AbstractDocument и не содержит каких-либо специальных форматирующих символов (Think notepad против Word).Вы должны использовать это, когда вы просто хотите сохранить текст (файл журнала и т. Д.)

HTMLDocument

Документ, который моделирует HTML.Целью этой модели является поддержка как просмотра, так и редактирования.

HTMLDocument следует использовать при создании / изменении документов, содержащих HTML-код и предназначенных для просмотра в браузере.

1 голос
/ 24 мая 2010

Ваши требования не ясны (по крайней мере, мне). Ключ, как вы хотите, чтобы документ отображался.

JTextField для одной строки текста, так что это исключено.

JTextArea для нескольких строк текста, но не поддерживает определенные атрибуты. Таким образом, вы ограничены одним шрифтом и одним цветом.

JTextPane поддерживает несколько строк текста и поддерживает различные типы атрибутов, такие как жирный шрифт, курсив и т. Д.

Документ становится сложнее, чем больше функций вам требуется.

Если эти данные доступны для редактирования, вам потребуется встроенная поддержка, чтобы ограничить каждый документ 3 строками текста. Опять же, ваше определение линии не ясно. Это может быть строка длиной 1 КБ или максимум 40 символов, поэтому она может отображаться на экране как одна строка без переноса.

Я бы предположил, что JTextArea - это то, что вам нужно, и я считаю, что он использует PlainDocument.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...