2010-07-04 2 views
2

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

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

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

ответ

1

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

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

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


EDIT: Перечитав ваш вопрос, я вижу, что мой ответ не совсем подходит. Поскольку вам нужен многоцветный текст, JEditorPane - ваш единственный вариант; но вместо того, чтобы просто контактировать с текстом в виде текста с помощью HTML и т. д., вам нужно будет добавить слушателя в свою модель документа, чтобы поймать изменения, введенные при вводе; и после каждого изменения документа вы захотите изучить текст (опять же из модели документа) для текста, который должен или не должен быть выделен, и вы хотите применить форматирование к определенным тиражам текста.

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

+0

Сложность в том, что мне нужно сделать эту окраску «на лету», как пользователь вводит текст. Поэтому я не так сильно нуждаюсь в том, чтобы создавать текст, как его цвет, как я иду. – Zarkonnen

+0

Материал из моего EDIT (к югу от горизонтальной линии) должен помочь вам. Прослушивание модели позволяет отвечать на любой новый/измененный текст, раскрашивая его по своему усмотрению. –

Смежные вопросы