Java HTMLDocument(insertAfterEnd,insertAfterStart,insertBeforeEnd,insertBeforeStart)无法正常工作?

时间:2011-11-21 15:39:18

标签: java swing jtextpane jeditorpane dom

我有一个JEditorPane,它显示以编程方式生成的HTML(在运行时)。 到目前为止,当我添加"线"我在字符串缓冲区中重新创建整个HTML文本,然后将其传递给JEditorPane.setText方法。

现在创建的HTML变得非常大(最多可以达到几MB),我只想在最后添加新行,而不是重新生成所有HTML文本。

我试图在最后追加的原因是为了避免Swing(或套件?)必须再次渲染/解析整个文本。因为即使HTML生成不是在EDT中执行,而是在另一个swingworker线程中执行,"渲染"需要很长时间或者最好的是有一个显示渲染进度的进度条,这是不可能的(是吗?)。

所以我的想法是简单地追加到最后,但如果你有更好的想法,欢迎它!

由于我的文本是在HTML表格中格式化的,我想在此表的末尾添加我的新文本。为此,我尝试使用insertBeforeEnd的{​​{1}},但即使我尝试了大量解决方案,我也无法让它工作。请注意,我只有" table"标签

以下是我的代码的一部分

HTMLDocument

现在在本表末尾附上一些文字

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("<table><tr><td>A line of text</td></tr><tr><td>Another line of text</td></tr></table>");

请注意,由于//getting the Table Element Element e = doc.getElement(doc.getDefaultRootElement(), StyleConstants.NameAttribute, HTML.Tag.TABLE); 给出&#34; table&#34;

,因此似乎可以正确找到该元素

现在

System.out.println(e.getName())

提出异常:

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

修改

我已经开始了关于此问题后续行动的新问题,这里是链接:

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

即使每个人都在使用@JoopEggen的答案工作正常,但字体渲染并不相同,我也不明白为什么。在我看来,在这里发布的另一个问题是我在另一个问题(上面给出的链接)中提出的问题。但在我的情况下,这有点跟进了这个。

由于有些人可能会面临同样的问题,因此我将此EDIT设置为指向相应的主题。

1 个答案:

答案 0 :(得分:7)

private HTMLDocument doc;
...
JTextPane jep = jTextPane1;
jep.setContentType("text/html");
jep.setText("<html><table><tr><td>A line of text</td></tr><tr><td>Another line of text</td></tr></table>");
doc = (HTMLDocument)jep.getStyledDocument();

setText后跟的内容类型安装EditorKit并确定文档。因此,请在之后使用StyledDocument。 setText(“...”)再次确保获取HTML。 (你可以拥有一个JLabel或JButton,其中包含“&lt; html&gt;&lt; b&gt; H&lt; / b&gt;&lt; i&gt; ello&lt; / i&gt;&lt; span style ='color:#0ff078'&gt; !!!&lt; / span&gt;“。

JTextPane是更高级别的JEditorPane(奇怪的命名)。它提供了StyledDocument,您可以通过它来完成更多工作。

其余的都没问题。