0

这有什么区别

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

还有这个?

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

我知道第二行没有打印消息,但是为什么!?我正在聊天,新消息应该出现在上一条消息的下方(就像在正常聊天中一样),但在第一行,新消息会出现在所有对话中。

我使用带有内容类型 HTML 的 JEditorPane,因为聊天内容是笑脸和这些东西,如果我将内容类型更改为 textPlain,第二行就可以完美运行。

我正在寻找解决方案,并使用 Document 和 Attributes 找到 insertString 的东西,但我不明白如何使用以及这是否可以解决我的问题。

4

2 回答 2

0

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

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

String s = "";
...
s += msg;
conversationPane.setText(s);
于 2013-09-12T00:09:34.750 回答
0

使用 HTMLDocument 中的 insertBeforeStart 方法。斯卡拉示例:

//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 "" )); }
于 2014-09-03T17:57:34.357 回答