2

是的,我已经知道 JTextArea 或 JTextField 不支持 HTML。

我想将文本添加到 JTextArea 之类的“屏幕”中,然后继续向其附加文本。

我尝试使用 JTextArea 效果很好,但它似乎不支持格式化......

所以我尝试使用 JEditorPane 的子类 JTextPane,但是这个没有它的附加功能......

有人可以指导我如何轻松地将文本附加到 JTextPane 或格式化 JTextArea。

或者如果有任何其他更好的组件,请告诉我:)

update 方法由为多个对象执行此操作的主体调用。这只是给出了一堆格式化的字符串,然后放在一个漂亮的框架中向用户展示。

@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());
    }
4

3 回答 3

4

有人可以指导我如何轻松地将文本附加到 JTextPane

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

并使用属性而不是 HTML,它更容易。例如,您可以将“绿色”属性定义为:

SimpleAttributeSet green = new SimpleAttributeSet();
StyleConstants.setForeground(green, Color.GREEN);
于 2011-05-07T02:22:01.927 回答
2

您可以使用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);

输出将是

<div class='test'><b>测试</b></div>

你应该这样做

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

所以你的编辑器窗格上的输出将是

测试


最后,如果您想设置编辑器窗格的样式,可以使用此方法

StyleSheet css = htmlEditorKit.getStyleSheet();
css.addRule(".test {color: green;}");
于 2013-07-25T09:54:12.310 回答
0

对于格式化输出,JEditorPAne 可能是最好的选择。

您可以使用 JEditorPane 的 getText() 方法获取当前在窗格中的文本,然后附加新文本并调用 setText() 将所有内容放回原处。

例如

   b.append(chatArea.getText());
   b.append("All the other text")
   chatArea.setTExt(b.toString());
于 2011-05-06T17:47:46.683 回答