Я использую JeditorPane и JEditorKit для отображения некоторого HTML. HTML-код отображается правильно, но изображения отображаются как поврежденные (они правильно отображаются в браузере). Изображение src является base64. Я устанавливаю тип контента таким образом:
final JEditorPane ed=new JEditorPane();
ed.setContentType("text/html");
Я предполагаю, что, поскольку он содержит как текст, так и изображения, тип содержимого неверен. Если это так, то что должно быть установлено? ТИА.
** После ответа Мадушана Переры **
final JEditorPane ed=new JEditorPane();
ed.setContentType("text/html");
ed.setEditable(false);
HTMLDocument html=(HTMLDocument) ed.getDocument();
html.putProperty("IgnoreCharsetDirective", new Boolean(true));
HTMLEditorKit htmle=(HTMLEditorKit) ed.getEditorKit();
try {
htmle.insertHTML(html,html.getLength(),content,0,0,null);
} catch (BadLocationException | IOException e) {
// Should not get here
e.printStackTrace();
}
ed.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(final HyperlinkEvent pE) {
if (HyperlinkEvent.EventType.ACTIVATED == pE.getEventType()) {
String desc = pE.getDescription();
if (desc == null || !desc.startsWith("#")) return;
desc = desc.substring(1);
ed.scrollToReference(desc);
}
}
});
ed.setCaretPosition(0);
JScrollPane scroll=new JScrollPane(ed,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JPanel jp=new JPanel();
Dimension size=new Dimension(700,700);
jp.setPreferredSize(size);
jp.setLayout(new BorderLayout());
jp.add(scroll);
JOptionPane.showMessageDialog(null,jp,title,JOptionPane.INFORMATION_MESSAGE);
'html' - строка, содержащая HTML. Это было прочитано из файла типа html, используя IOUtils.toString. Мне, вероятно, придется разработать SCCE.
Реализация CustomEditor
final JEditorPane ed=new JEditorPane();
ed.setContentType("text/html");
ed.setEditable(false);
CustomToolKit htmle=new CustomToolKit();
ed.setEditorKit(htmle);
String content=readFile(fileName_+".html").replaceAll("(\\r|\\n)", "");
content=content.replace("!!!!",VERSION.VERSION);
ed.setText(content);
ed.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(final HyperlinkEvent pE) {
if (HyperlinkEvent.EventType.ACTIVATED == pE.getEventType()) {
String desc = pE.getDescription();
if (desc == null || !desc.startsWith("#")) return;
desc = desc.substring(1);
ed.scrollToReference(desc);
}
}
});
ed.setCaretPosition(0);
JScrollPane scroll=new JScrollPane(ed,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JPanel jp=new JPanel();
Dimension size=new Dimension(700,700);
jp.setPreferredSize(size);
jp.setLayout(new BorderLayout());
jp.add(scroll);
JOptionPane.showMessageDialog(null,jp,title,JOptionPane.INFORMATION_MESSAGE);
}
Теперь я ничего не получаю. Очевидно, я не правильно реализовал ваше предложение.