无法使用text / html向JEditorPane添加文本

时间:2014-07-30 07:08:14

标签: java html swing jeditorpane

我班上有一个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

感谢您的帮助。

1 个答案:

答案 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的实例,您可以使用该实例为新聊天消息添加新元素。