Java JEditorPane Format - PullRequest
       15

Java JEditorPane Format

2 голосов
/ 27 апреля 2010

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

JEditorPane имеет тип text / html.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я ставлю более одного пробела между символами, он автоматически удаляется анализатором, потому что это HTML!

как мне сделать так, чтобы пробелы не были зачищены?

example: hello               world

becomes: hello world

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

есть ли лучший вариант, чем использование JEditorPane? если бы я использовал JTextPane, было бы легче реализовать?

Я бы хотел, чтобы окна / панели чата могли обрабатывать жирный шрифт, встраивание URL пока.

спасибо и с нетерпением ждем ваших указаний.

РЕДАКТИРОВАТЬ: я пытаюсь заменить "" на соответствующий символ.

newHome[1] = newHome[1].replace(" ", newChar) 

каким должно быть значение newChar?

РЕДАКТИРОВАТЬ: я пытаюсь:

newHome[1] = newHome[1].replaceAll(" ", " ");

но это не дает результатов. есть идеи?

РЕДАКТИРОВАТЬ: @ Томас - спасибо! по какой-то причине я могу опубликовать заметку к вашему ответу.

1 Ответ

3 голосов
/ 28 апреля 2010

Использование разметки HTML - это быстрый способ выполнить простое форматирование текста в текстовом компоненте Swing. Однако это не единственный способ.

Более сложным методом является использование javax.swing.text.StyledDocument, к которому вы можете прикрепить различные «стили» (отсюда и название). Стиль - это, в основном, набор атрибутов, например, должен ли текст быть выделен жирным шрифтом или курсивом или какого цвета он должен иметь.

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

JTextPane textPane = new JTextPane();
Style bold = textPane.addStyle("bold", null);
StyleConstants.setBold(bold, true);

textPane.setText("I'll be bold.");

textPane.getStyledDocument().setCharacterAttributes(8, 4, bold, true);

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

К сожалению, недостатком является то, что вам придется самостоятельно позаботиться о механике связей. Хотя вы можете использовать существующую инфраструктуру javax.swing.event.HyperlinkListener и др., Вы будете нести ответственность за обнаружение щелчков мыши. То же самое касается наведения и изменения курсора на символ руки и т. Д.

...