如何使用insertString在JEditorPane上用HTML追加一行

时间:2013-09-11 14:58:28

标签: java html jeditorpane appendtext

这个

有什么区别
conversationPane.setText(msg + conversationPane.getText());

这个?

conversationPane.setText(conversationPane.getText() + msg);

我知道第二行不打印消息但是为什么!?我正在聊天,新消息应显示在上一条消息的下方(例如在正常聊天中),但在第一行,新消息会显示在所有对话中。

我使用JEditorPane内容类型HTML,因为聊天内容表情符号和这些东西,如果我将内容类型更改为textPlain,则第二行可以正常工作。

我正在寻找解决方案,并使用Document和Attributes查找insertString的内容,但我不知道如何使用,如果这可以解决我的问题。

2 个答案:

答案 0 :(得分:0)

我不确切知道为什么。但是,我知道它与在</html>标记后附加的文本有关。当您setText()使用text/html内容类型的JEditorPane时,会自动添加<html>个标记。

我之前处理过类似的问题。我修复它的方法是将所有文本保存在字符串中,然后在窗格中设置它:

String s = "";
...
s += msg;
conversationPane.setText(s);

答案 1 :(得分:0)

使用HTMLDocument中的insertBeforeStart方法。 Scala示例:

//set basic document structure
text = "<html><title></title><body><span id='Text'></span></body></html>"
//get Document as HTMLDocument
val htmlDoc = peer.getDocument.asInstanceOf[javax.swing.text.html.HTMLDocument]
//get span element with id=Text, before which text will be inserted
val bottomText = htmlDoc.getElement("Text")
//append function with optional line feed
def appendXml(xml:String, lineFeed:Boolean) = { htmlDoc.insertBeforeStart(bottomText, s + (if (lf) "<br>" else "" )); }