JEdi​​torPane的JTextArea中的HTML,JTextPane

时间:2011-05-06 17:43:52

标签: java swing jtextfield jtextarea jeditorpane

我已经知道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 个答案:

答案 0 :(得分:4)

  

有人能指导我如何轻松地将文字附加到JTextPane

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

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

SimpleAttributeSet green = new SimpleAttributeSet();
StyleConstants.setForeground(green, Color.GREEN);

答案 1 :(得分:1)

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

输出

&LT; div class ='test'&gt;&lt; b&gt;测试&lt; / b&gt;&lt; / div&gt;

你应该这样做

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

所以编辑窗格的输出将是

测试


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

StyleSheet css = htmlEditorKit.getStyleSheet();
css.addRule(".test {color: green;}");

答案 2 :(得分:0)

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

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

e.g。

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