Делать слова разными цветами в JTextField / JTextPane /? - PullRequest
2 голосов
/ 04 июля 2010

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

По сути, у меня есть JTextField (или какой-то другой компонент JText ...) и список слов. Я хочу, чтобы все слова в поле, отображаемые в списке, были красными, а остальные слова - зелеными. Так, например, если «огонь» находится в списке, «ель» будет выглядеть зеленым, а «огонь» будет красным.

Я пытался использовать JTextPane и DefaultStyledDocument, используя KeyListener для перемещения по тексту в документе и используя AbstractStyledDocument.replace, чтобы заменить существующие слова версиями с правильными атрибутами. Это ничего не сделало. Что я делаю не так?

1 Ответ

1 голос
/ 04 июля 2010

Ни JTextPane, ни JTextField не могут представить форматированный текст, т.е. текст, имеющий более одного формата.Для возможностей, подобных текстовому редактору, которые вы можете найти в WordPad или HTML, нужно использовать компонент JEditorPane или его потомок, JTextPane.

. Самое простое, что вы можете сделать, это установить ContentType.JEditorPane в «text / html» и просто установите его текст в строку, содержащую HTML.Компоненты структурированного текста на Java удивительно компетентны с HTML;Вы можете отображать таблицы и / или DIVs, и есть поддержка большей части CSS2.Проще всего сделать ваши стили встроенными, но вы даже можете использовать внешний стиль href s.

Если вы хотите получить модные программно, вы можете получить доступ к DocumentModel и создавать текст из участков текста, каждый из которых имеет своисобственное форматирование.DocumentModel по сути работает как программируемый текстовый редактор.


РЕДАКТИРОВАТЬ: Перечитывая ваш вопрос, я вижу, что мой ответ не совсем решает его.Поскольку вы хотите разноцветный текст, JEditorPane - ваш единственный вариант;но вместо того, чтобы просто транслировать предварительно окрашенный текст через HTML или что-то подобное, вам придется поместить слушателя в модель документа, чтобы отследить изменения, введенные при вводе текста;и после каждого изменения документа вы захотите проверить текст (снова из модели документа) на наличие текста, который должен или не должен быть выделен, и вы захотите применить форматирование к определенным сериям текста.

В деталях есть дьяволы, но с этого стоит начать.

...