使用pane.getDocument.insert()在JEditorPane中插入图像

时间:2013-03-09 13:26:05

标签: java image swing jeditorpane

我正在创建一个聊天应用程序,我想将字符串追加到JEditorPane中,所以我使用JEditorPane.getDocument.insert()方法来执行此操作:

clientListDoc.insertString(clientListDoc.getLength(),image+"-"+name[0]+"\n", null);

但现在我也想要显示图像。我已将内容类型设置为HTML,我使用它:

String temp=ClassLoader.getSystemResource("images/away.png").toString();
image="<img src='"+temp+"'></img>";

但是如果我使用insert(),但是当我使用setText()时,我不会在JEditorPane上获取图像。请帮忙!!我想做这两件事!

我可以尝试使用getText来获取前面的字符串并将新字符串附加到此字符串,然后使用setText()来设置整个字符串但是有更好的解决方案吗?

1 个答案:

答案 0 :(得分:3)

使用setText()方法,它正在为您格式化为HTML。使用insertString,您的标记将转换为文本。查看文档的源HTML,您会看到&lt; img src = imagepath&gt; &amp; lt; img src = imagepath&amp; GT;

您需要使用HTMLDocument类正确插入图片:

import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;

class Test {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        JEditorPane edPane = new JEditorPane(); 

        try {

            edPane.setContentType("text/html");

            System.out.println(edPane.getText());

            HTMLEditorKit hek = new HTMLEditorKit();

            edPane.setEditorKit(hek);

            HTMLDocument doc = (HTMLDocument) edPane.getDocument();

            doc.insertString(0, "Test testing", null);

            Element[] roots = doc.getRootElements();
            Element body = null;
            for( int i = 0; i < roots[0].getElementCount(); i++ ) {
                Element element = roots[0].getElement( i );
                if( element.getAttributes().getAttribute( StyleConstants.NameAttribute ) == HTML.Tag.BODY ) {
                    body = element;
                    break;
                }
            }

            doc.insertAfterEnd(body,"<img src="+ClassLoader.getSystemResource("thumbnail.png").toString()+">");
            System.out.println(edPane.getText());
        } catch(BadLocationException e) {
        } catch (java.io.IOException e) {}


        frame.add(edPane);

        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);


    }

}