我班上有一个JEditorPane
,我正在尝试为其添加文字。 (我没有使用文本区域或窗格,因为它必须支持HTML等特定内容)
当我输入JEditorPane
并输入chatLog.setContentType("text/html");
时,我遇到的问题是(我的chatLog.setText("Test");
称为chatLog)
什么都没发生......
第二个我评论/删除chatLog.setContentType("text/html");
应该出现的文字,显示正常。
我不知道我做错了什么。
来源:
public ServerGUI() {
// Rest of code above.
JEditorPane chatLog = new JEditorPane();
chatLog.setContentType("text/html");
chatLog.setEditable(false);
// Rest of code below.
}
public void appendText(String str) {
// Can use a word instead of str too like the "Test" above.
chatLog.setText(chatLog.getText() + str);
//chatLog.setCaretPosition(chatLog.getText().length() - 1);
}
而且,还有另一个小问题,我不太重要,当我将内容类型设置为HTML时,我无法设置插入位置,如上所示。它说有IllegalArgument Exception
感谢您的帮助。
答案 0 :(得分:1)
问题是你附加了这样的新文字:
chatLog.setText(chatLog.getText() + str);
因此,您将文本附加到当前内容。如果您设置了text/html
内容类型而您从未致电JEditorPane.setText()
,则它仍然有一些默认的HTML代码。此默认HTML代码以正确的</html>
结束标记结尾。现在,如果您将任何内容附加到HTML文本,那么它将位于</html>
结束标记之后,因此不会呈现。
要证明:
JEditorPane chatLog = new JEditorPane();
chatLog.setContentType("text/html");
System.out.println(chatLog.getText()); // This will print an HTML document
空HTML文档包含<body>
标记和空<p>
标记,如下所示:
<html>
<head>
</head>
<body>
<p style="margin-top: 0">
</p>
</body>
</html>
建议的解决方案:
使用JEditorPane.getDocument()
。如果您设置text/html
内容类型,则默认情况下,返回的Document
将是HTMLDocument的实例,您可以使用该实例为新聊天消息添加新元素。