如何在JTree中将HTML显示为纯文本?

4

问题: 我的树叶节点的内容是HTML格式,但我不希望它们以HTML格式呈现。

许多Swing组件可以包含HTML片段,以改变它们的呈现方式。这包括JTree的节点:

DefaultMutableTreeNode myLeafNode = new DefaultMutableTreeNode("<html><body><h1>Hello World</h1></body></html>");

如果将此节点添加到DefaultTreeModel,并将模型添加到JTree中,则会将内容呈现为HTML。
我该如何防止这种情况发生?我该如何强制它以纯文本形式呈现? 编辑:@David Wallace的答案(请参见下面)有效。以下是它的外观:enter image description here

1
你是想要显示HTML源代码吗?还是说你只是想要它以未格式化的方式显示(就好像标签等不存在)? - Dawood ibn Kareem
我想显示源代码。我想看到整个字符串,包括标签。 - james.garriss
1
通过使用HTML实体&lt;html&gt; - Mr. Alien
@Mr.Alien和我尝试了HTML实体的想法——这是一种新颖的方法——但不幸的是,它没有起作用。实体被呈现为纯文本而不是实体。结果输出并不美观。 - james.garriss
这是因为在Mr. Alien的回答中,String的开头不再是"<html>"了 - 这就是Swing用来决定如何显示它的。 - Dawood ibn Kareem
除了@DavidWallace的正确答案外,还有一个小技巧:您可以在<html>之前将某些内容放在字符串的开头,例如空格。当然,这会改变对齐方式。 - Hauke Ingmar Schmidt
1个回答

5
使用Apache Commons库中的StringEscapeUtils类来转义您的HTML,然后将其放入<html><body>中,以告诉Swing将结果显示为HTML。
import org.apache.commons.lang3.StringEscapeUtils;

String escapedHtml = StringEscapeUtils.escapeHtml4(htmlToDisplay); 
DefaultMutableTreeNode myLeafNode = 
    new DefaultMutableTreeNode("<html><body>" + escapedHtml + "</body></html>");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接