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();
}
});
}
}
行 2 は、最初は太字の空の行として設定されていますが、解析後、太字の属性が保持されていないようです。また、これを自分で実行し、カーソルを 3 行目に置き、その行のすべてを削除すると、次に入力する文字が太字にならないことに注意してください。HTMLDocument ツリーのリーフ要素は、それらが表すテキストがなくなると削除されると思いますが、ユーザーが実行するとバグのある動作のように見え始めます。
スタイリング属性を空の行で解析し、スタイル付きの行のすべてが削除されたときに保持する方法を知っている人はいますか?
ありがとう!--アンディ