从 HTML 文件读取文本时,JTextPane 未添加新行

JTextPane is not adding a new line when reading text from HTML file

我正在尝试根据元素的 id 从 HTML 文件中读取文本并将其显示在 JTextPane 中。但是,当我阅读文本并显示它时,它不会换行。 以下是正在读取的 HTML 的示例:

<!-- LOOK BED command text -->
<p id="look-bed">
    The bed looks hard and uncomfortable.<br>
</p>


<!-- LOOK FOOD command text -->
<p id="look-food">
    The food doesn't look very appetizing.<br>
</p>

我用来读取 HTML 页面的方法是:

   public static String ReadFromHTMLFile(String tagId) {
        Document htmlFile;
        File file = new File("GameText.html");
        try {
            htmlFile = Jsoup.parse(file, "UTF-8");
            Element element = htmlFile.getElementById(tagId);
            return String.valueOf(element);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return "Unable to access " + tagId + " element";
    }

我用来更新 JTextPane 中文本的方法是:

   public static void SetGameText(String location, String text, boolean appendText) {
        if(appendText) {
            try {
                HTMLDocument doc = (HTMLDocument) gameText.getStyledDocument();
                doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()), text);
            }
            catch (IOException | BadLocationException e) {
                e.printStackTrace();
            }
        }
        else {
            gameText.setText("");
            gameText.setText(location + text);
        }
    }

用户应该在文本框中输入命令并单击提交按钮并根据输入的命令获得反馈。问题是输入的每个命令都出现在同一行而不是换行。

如果 appendText 为假则运行的 SetGameText 方法部分按预期方式运行,在我想要的地方创建换行符,但如果 appendText 为真则运行的部分没有创建换行符,甚至尽管我在 HTML.

中使用了
标签

要合理显示 HTML 个文档,请使用 JEditorPane。 将其切换为 text/html 内容,您应该能够渲染您的内容。

另请查看 如何在每一行上获取 DIV。

如有疑问,只需添加 <br/> 个元素。

我想出了解决问题的方法。我没有将文本放在

标记中,而是将它放在 HTML 文档中的

标记中,并将显示设置为阻塞,它按我想要的方式工作。我还在要添加到 JEditorPane 的文本末尾附加了一个
标记。

比如我改成:

<p id="look-bed">
    The bed looks hard and uncomfortable.
</p>

至:

<div id="look-bed">
    The bed looks hard and uncomfortable.
</div>

我添加了 CSS 特定于 div 标签的样式来设置显示:

div { 显示:块 }

向 JEditorPane 添加文本的新方法是:

public static void SetGameText(String location, String text, boolean appendText) {
        if(appendText) {
            try {
                String addedText = text + "<br>"; // added new variable to append <br> tag
                HTMLDocument doc = (HTMLDocument) gameText.getDocument();
                doc.insertAfterEnd(doc.getCharacterElement(doc.getLength()), addedText); //use new variable to add text to JEditorPane
            }
            catch (IOException | BadLocationException e) {
                e.printStackTrace();
            }
        }
        else {
            gameText.setText(HTMLStyles);
            gameText.setText(location + text);
        }
    }