我正在创建一个聊天应用程序,我想将字符串追加到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()来设置整个字符串但是有更好的解决方案吗?
答案 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);
}
}