我目前正在使用带有html的JTextPane。我将其内容类型设置为html,一切正常......或者我认为。
JTextPane的功能是输出段落(带有
标签),每个段落都有不同的颜色。每组
标签都配有内联样式属性。
现在我打印
标签,如下所示:
String myLine = "<P style=\"color:blue;" +
"padding-left:25px;" +
"text-indent:-25px;" +
"font-family:Courier New;" +
"font-size:11;" +
"\">" ;
doc.insertBeforeEnd(body, myLine);
其中doc是JTextPane的JTextPane HTMLDocument,body是我的HTMLDocument中的body元素。
它在JTextPane中输出一切正常,文本为蓝色,快递,11尺寸,带有悬挂缩进。 PERFECT!
您会认为,如果您再次恢复文本,您会看到P标记就像您构建它一样。所以我使用getText()方法恢复其中的html: 的现实
<p style="text-indent: -25px; padding-left: 25px">
当我真的希望看到这个: 的期望
<p style="color:blue; text-indent: -25px; padding-left: 25px; font-family:Courier New; font-size:11;">
为什么这样做?有办法避免这种情况吗?如果我不得不猜测,似乎Java提取文本属性,以便它可以通过自己的方式更有效地处理这些属性。
然而,我之所以这样问是因为一旦我开始更深入地定制我的JTextPane,着色开始变得不可靠。我宁愿直接在内联样式上使用属性。
提前致谢,非常感谢您的帮助。
编辑:有人要求在添加
标签之前和之后看到完整的html输出。
在:
<html>
<head>
</head>
<body>
</body>
</html>
现在我在java中执行此代码:
String htmlLine = "<p style=\"color:blue; " +
"text-indent: -25px; " +
"padding-left: 25px; " +
"font-family:Courier New; " +
"font-size:11;\" >" ;
try {
doc.insertBeforeEnd(body, htmlLine);
} catch (Exception e) {
System.err.println(e);
}
后:
<html>
<head>
</head>
<body>
<p style="text-indent: -23px; padding-left: 25px">
First Text
</p>
</body>
</html>
答案 0 :(得分:1)
根据insertBeforeEnd()
与insertAfterEnd方法不同,新元素成为指定元素的子元素,而不是兄弟元素。
这意味着插入的元素正在成为孩子并继承父母的风格。在内部插入时,HTMLDocument从已存在的父级子项中删除重复的样式信息。所以这就是你得到的原因
<p style="text-indent: -25px; padding-left: 25px">
而不是
<p style="color:blue;
text-indent: -25px;
padding-left: 25px;
font-family: Courier New;
font-size:11;" >
最后你原因的原因是