HTML в JTextArea JEditorPane, JTextPane - PullRequest
2 голосов
/ 06 мая 2011

Да, я уже понял, что JTextArea или JTextField не поддерживают HTML.

Я хочу добавить текст на «экран», такой как JTextArea, и позже продолжать добавлять к нему текст.

Я пытался с JTextArea, который работал чудесно, но, кажется, он не поддерживает форматирование ...

Поэтому я попытался использовать подкласс JEditorPane JTextPane, но у этого нет функции добавления ....

Может ли кто-нибудь указать мне правильное направление, как я могу легко добавлять текст в JTextPane или форматировать JTextArea.

Или, если есть какой-то другой компонент, лучше для этого, пожалуйста, сообщите мне :)

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

@Override
public void update(String channel, String sender, String message) {

    if(channel.equals(this.subject) || sender.equals(subject)){
        StringBuffer b = new StringBuffer();
        b.append("<html>");
        b.append("<b>");
        b.append("</b>");
        b.append("[");
        b.append(sender);
        b.append("] : ");
        b.append("</b>");
        b.append(message);
        b.append("</html>");
        b.append("\n");

        chatArea.append(b.toString());
    }

Ответы [ 3 ]

4 голосов
/ 07 мая 2011

Может кто-нибудь подсказать мне в правильном направлении, как я могу легко добавить текст в JTextPane

Document doc = textPane.getDocument();
doc.insertString(doc.getLength(), "some text", green);

И использовать атрибуты вместо HTML, это намного проще.Например, вы можете определить «зеленые» атрибуты следующим образом:

SimpleAttributeSet green = new SimpleAttributeSet();
StyleConstants.setForeground(green, Color.GREEN);
1 голос
/ 25 июля 2013

Вы можете использовать JEditorPane .Но если вы хотите добавить несколько строк, которые содержат тег HTML, вам следует выполнять некоторые методы, а не просто метод insertString().

Например, у вас есть

//setup EditorPane
JEditorPane yourEditorPane = new JEditorPane();
yourEditorPane.setContentType("text/html");

//setup HTMLEditorKit 
HTMLEditorKit htmlEditorKit = new HTMLEditorKit();
yourEditorPane.setEditorKit(htmlEditorKit);

Если вы используете толькоinsertString ()

String htmlText = "<div class='test'><b>Testing</b></div>";
Document doc = yourEditorPane.getDocument();
doc.insertString(doc.getLength(), htmlText, null);

Вывод будет

Тестирование

Вы должны сделать этот метод

htmlEditorKit.insertHTML((HTMLDocument) doc, doc.getLength(), htmlText, 0, 0, null);

Таким образом, вывод на вашей панели редактирования будет

Тестирование


Последнее, если вы хотите стилизовать вашВ редакторе вы можете использовать этот метод

StyleSheet css = htmlEditorKit.getStyleSheet();
css.addRule(".test {color: green;}");
0 голосов
/ 06 мая 2011

Для форматированного вывода JEditorPAne, вероятно, является лучшим вариантом.

Вы можете использовать метод getText () JEditorPane, чтобы получить текст, который в данный момент находится на панели, затем добавить новый текст и вызвать setText (), чтобы вернуть все обратно.

, например

   b.append(chatArea.getText());
   b.append("All the other text")
   chatArea.setTExt(b.toString());
...