Когда JEditorPane, поддерживаемый HTMLEditorKit, содержит тег <br>
, за которым следует пустая строка, эта строка не отображается правильно, и каретка обрабатывается неправильно. Рассмотрим этот пример кода:Swing HTMLEditorKit/JEditorPane не обрабатывает <br> и пустые строки правильно
import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
public class HTMLEditorTest {
public static void main(String[] args) throws IOException, BadLocationException {
JFrame frame = new JFrame();
Reader stringReader = new StringReader("test<br><p>a");
HTMLEditorKit htmlKit = new HTMLEditorKit();
HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
htmlKit.read(stringReader, htmlDoc, 0);
JEditorPane editorPane = new JEditorPane();
editorPane.setEditorKit(htmlKit);
editorPane.setDocument(htmlDoc);
frame.getContentPane().add(BorderLayout.CENTER, new JScrollPane(editorPane));
frame.setBounds(100, 100, 500, 400);
frame.setVisible(true);
}
}
Пустая строка после <br>
тега не отображается. Когда каретка расположена слева от «а» полукокса и стрелка вверх клавишу нажатой, каретка исчезает:
Перед нажатием кнопки «вверх»:
После нажатия кнопки «вверх»:
Обратите внимание, что расстояние между «тестом» и «а» слишком мало, и каретка исчезла.
Если затем ввести текст, недостающая пустая строка становится видимым:
Проблема, кажется, что пустая строка визуализируется с высотой 0px, и, таким образом, не видно, в том числе карет, если он находится на этой линии. После того, как линия имеет контент, это содержимое заставляет ненулевую высоту строки.
Знаете ли вы, что просто обходной путь/исправить эту проблему? Я считаю, что в худшем случае мне нужно написать own editor kit (см. Также here и here для индивидуальной упаковки строк в JEditorPane) и/или custom tag (также here).
Спасибо, но это не проблема. Поскольку я использую явно HTMLEditorKit, API интерпретирует строку как HTML уже. Я оставил '
...' для простоты. Это работает так же, если эти теги включены. –