这个
有什么区别conversationPane.setText(msg + conversationPane.getText());
这个?
conversationPane.setText(conversationPane.getText() + msg);
我知道第二行不打印消息但是为什么!?我正在聊天,新消息应显示在上一条消息的下方(例如在正常聊天中),但在第一行,新消息会显示在所有对话中。
我使用JEditorPane内容类型HTML,因为聊天内容表情符号和这些东西,如果我将内容类型更改为textPlain,则第二行可以正常工作。
我正在寻找解决方案,并使用Document和Attributes查找insertString的内容,但我不知道如何使用,如果这可以解决我的问题。
答案 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 "" )); }