Java HTMLDocument (insertAfterEnd, insertAfterStart, insertBeforeEnd, insertBeforeStart) не работает?

У меня есть JEditorPane , который отображает HTML, созданный программно (во время выполнения). До сих пор, когда я добавлял " line "Я воссоздавал весь HTML-текст в строковом буфере и затем передавал его методу JEditorPane.setText .

Теперь созданный HTML-код стал довольно большим (может достигать нескольких МБ), и я бы просто добавил новую строку в конце вместо того, чтобы заново генерировать весь текст HTML.

Причина, по которой я пытаюсь добавить в конец, состоит в том, чтобы избежать повторной рендеринга / синтаксического анализа всего текста Swing (или комплекту?). Потому что, хотя генерация HTML выполняется не в EDT, а в другом потоке Swingworker, «рендеринг» занимает много времени. Или лучше всего иметь индикатор выполнения, отображающий прогресс рендеринга, что невозможно (не так ли?).

Моя идея состоит в том, чтобы просто добавить в конец, но если у вас есть идея получше, это приветствуется!

Поскольку мой текст отформатирован в таблице HTML, я хотел бы добавить свой новый текст в конец этой таблицы. Для этого я попытался использовать insertBeforeEnd из HTMLDocument , но мне не удается заставить его работать, хотя я перепробовал множество решений. Обратите внимание, что у меня есть только тег «table».

Вот часть моего кода.

JEditorPane jep = new JEditorPane();
HTMLEditorKit kit = new HTMLEditorKit();
HTMLDocument doc = new HTMLDocument();

jep.setEditorKit(kit);
jep.setDocument(doc);

//setting dummy text within a HTML table
jep.setText("
A line of text
Another line of text
");

Теперь добавим текст в конец этой таблицы

//getting the Table Element
Element e = doc.getElement(doc.getDefaultRootElement(), StyleConstants.NameAttribute, HTML.Tag.TABLE);

Обратите внимание, что элемент, похоже, правильно найден как System.out.println (e.getName ( )) дает "table"

Теперь

//inserting text at the end of the table
try {
        doc.insertBeforeEnd(e, "A New Line");
    } catch (BadLocationException ex) {
        System.out.println(ex);
    } catch (IOException ex) {
        System.out.println(ex);
    }

вызывает у меня исключение:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: No HTMLEditorKit.Parser
at javax.swing.text.html.HTMLDocument.verifyParser(HTMLDocument.java:1500)
at javax.swing.text.html.HTMLDocument.insertBeforeEnd(HTMLDocument.java:1248)
...

EDIT

Я начал новый вопрос по продолжению этого, вот ссылка:

https://stackoverflow.com/questions/9659209/jeditorpane-htmldocument-different-rendering-how-why

Несмотря на то, что все работает нормально с ответом @JoopEggen, рендеринг шрифтов отличается, а я не не понимаю почему.Как мне кажется, это другая проблема, чем та, что размещена здесь, я задал ее в другом вопросе (ссылка, приведенная выше). Но в моем случае это своего рода продолжение этого.

Поскольку некоторые могут столкнуться с той же проблемой, я установил РЕДАКТИРОВАНИЕ, чтобы указать вам на соответствующую ветку.

5
задан Community 23 May 2017 в 12:25
поделиться