我注意到在HTML JEditorPane上如果有一行是空的,之前设置的所有样式都会消失。例如,查看下面的代码示例:
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.text.AttributeSet;
import javax.swing.text.StyleConstants;
import javax.swing.text.html.HTMLEditorKit;
public class BlankLineTester {
private JEditorPane jep;
public BlankLineTester() {
String html = "<html><head></head><body>" +
"<p><b>Line 1</b></p>" +
"<p><b></b></p>" +
"<p><b>Line 3</b></p>" +
"</body></html>";
jep = new JEditorPane();
jep.setContentType("text/html");
jep.setText(html);
JFrame frame = new JFrame("Blank Line Test");
frame.getContentPane().add(jep);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
System.out.println("Line 3 is " + isInputAttributeBold());
jep.getCaret().setDot(8);
System.out.println("Line 2 is " + isInputAttributeBold());
}
private boolean isInputAttributeBold() {
AttributeSet attSet = ((HTMLEditorKit)jep.getEditorKit()).getInputAttributes();
return StyleConstants.isBold(attSet);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new BlankLineTester();
}
});
}
}
第二行最初设置为空的粗体行,但在解析后,似乎没有保留粗体属性。另外请注意,如果您运行此程序并将光标放在第三行,然后删除该行上的所有内容,则您输入的下一个字符将不会是粗体。我想当HTMLDocument树中的叶子元素被删除时,它们所代表的文本也被消除了,但当用户运行它时,这种行为开始变得像有缺陷的行为。
有没有人有任何想法如何让样式属性在空行上解析,并在删除样式化行上的所有内容时保留样式属性?
谢谢! --安迪
JEditorPane
中也是同样的情况,如果您运行此程序并尝试删除所有内容,请查看是否发生了这种情况,否则我可能误解了您的意思。 - nIcE cOw