JTextPane - Bullet z listą HTMLEditorKit nie renderuje poprawnie, chyba że wykonam setText (getText ()) i odmaluję
Mam:
JTextPane jtextPane = new JTextPane();
jtextPane.setEditorKit(new HTMLEditorKit());
...
Następnie próbuję dodać przycisk listy nieuporządkowanej do paska narzędzi w taki sposób, że akcja:
Action insertBulletAction =
HTMLEditorKit.InsertHTMLTextAction ("Bullets", "<ul><li> </li></ul>",
HTML.Tag.P, HTML.Tag.UL);
JButton insertBulletJButton = new JButton(insertBulletAction);
I to zawiera właściwy kod, jeśli zrobię zrzut wygenerowanego kodu HTML. Jednak zostanie to zrealizowane bardzo źle, ponieważ nie jest nawet zbliżone do rozsądnego, jak pokazano poniżej:
Jeśli jednak to zrobię:
jtextPane.setText(jtextPane.getText());
jtextPane.repaint();
Wtedy wszystko jest w porządku.Ale jeśli nie zrobię OBU linii, to żadna z nich nie będzie działać sama. Mogę również sprawić, by działał, ustawiając tekst przed wyświetleniem jtextPane.
To jest naprawdę dziwne i nie rozumiem, dlaczego musiałbym zrobićsetText(getText())
po którym następuje arepaint()
.
PS: To bardzo podobne do tego pytania:Jak zaimplementować punktory w JTextPane? I działa, z wyjątkiem tego, że nie jest poprawnie renderowany. Nie wiem, czy ma to związek z HTMLEditorKit vs RTFEditorKit, ale coś, co powoduje, że renderowanie nie powiedzie się. Podany kod źródłowy HTML jest idealny ...
PS2:Ten link jest również bardzo przydatny ale to też nie pokazało rozwiązania.
Aktualizacja: Oto pełny kod na żądanie, ale niewiele więcej ...
public static void main(String[] args)
{
JFrame jframe = new JFrame();
jframe.setSize(800, 600);
jframe.setVisible(true);
JTextPane jtextPane = new JTextPane();
jtextPane.setEditorKit(new HTMLEditorKit());
Action insertBulletAction = new HTMLEditorKit.InsertHTMLTextAction ("Bullets",
"<ul><li> </li></ul>", HTML.Tag.P, HTML.Tag.UL);
JButton insertBulletJButton = new JButton(insertBulletAction);
insertBulletJButton.setRequestFocusEnabled(false);
jframe.setLayout(new BorderLayout());
jframe.add(new JScrollPane(jtextPane));
jframe.add(insertBulletJButton, BorderLayout.SOUTH);
}