用于HTML嵌入Base 64图像的JEditorPane内容类型是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (93)

我使用JedorPane和JEditorKit来显示一些HTML。HTML显示正确,但图像显示为破损(它们在浏览器中正确显示)。图像src是base 64。因此,我设置了内容类型:

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的字符串。它是使用IOUtils.toString从html文件类型读取的。我可能要开发一个SCCE。

提问于
用户回答回答于

你可以尝试如下所示:

    String imgsrc = this.getClass().getClassLoader()
            .getResource("your_package_name/image.png").toString();

    editor_pane.setContentType("text/html");
    editor_pane.setEditable(false);
    editor_pane.setText("<h3>Image Title</h3><img src='" + imgsrc + "' alt='img' name='img_name' width='100' height='100' /><br />");

扫码关注云+社区

领取腾讯云代金券