【问题标题】:showing images on jeditorpane (java swing)在 jeditorpane (java swing) 上显示图像
【发布时间】:2010-10-09 01:16:28
【问题描述】:

我有一个通过这种方式创建的 JEditorPane:

JEditorPane pane = new JEditorPane("text/html", "<font face='Arial'>" + my_text_to_show + "<img src='/root/img.gif'/>" + "</font>");

我把这个窗格放在一个 JFrame 上。

文字显示正确,但看不到图片,只有一个方块表示应该有图片(即:未找到图片时浏览器显示的“破损图片”)

【问题讨论】:

    标签: java image swing jeditorpane


    【解决方案1】:

    您必须提供类型并获取资源。就这样。我测试过的例子,但我不确定格式化。希望对您有所帮助:

    import java.io.IOException;
    import javax.swing.JEditorPane;
    import javax.swing.JFrame;
    
    public class Test extends JFrame {
    
        public static void main(String[] args) throws Exception {
            Test.createAndShowGUI();
        }
    
        private static void createAndShowGUI() throws IOException {
    
            JFrame.setDefaultLookAndFeelDecorated(true); 
    
            JFrame frame = new JFrame("HelloWorldSwing");
    
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            String imgsrc = 
                Test.class.getClassLoader().getSystemResource("a.jpg").toString();
            frame.getContentPane().add(new JEditorPane("text/html",
                "<html><img src='"+imgsrc+"' width=200height=200></img>"));
            frame.pack();
    
            frame.setVisible(true);
        }
    }
    

    【讨论】:

    • 我已经尝试过这种方式,但我曾经得到一个空指针异常:(
    • 我不知道你在哪里得到了异常,但你可以试试我的例子。并将 a.jpg 与该类放在同一目录中。您可以将其编译为 javac Test.java && run java Test。并且因为我没有设置窗口的大小,你可以将其设置得更大以查看图像。
    • (ClassLoader.getSystemResource 是一个静态方法,getResource 会是更好的选择。)
    【解决方案2】:

    JEditorPane 也使用 HTMLDocument.getBase 来定位相对 url,因此如果您要显示目录中的内容,请确保在 html 文档上设置基础,以便它解析相对于基础目录的 url。

    根据该图像的实际位置,您可能希望扩展 HTMLEditorKit+HTMLFactory+ImageView 并提供 ImageView 的自定义实现,该实现也负责将属性 URL 映射到图像 URL。

    【讨论】:

      【解决方案3】:

      以上方法都不适合我,但是'imgsrc = new File("passport.jpg").toURL().toExternalForm();' 让我尝试让 html 中的每个图像都有一个前面的“文件:”,以便它现在显示为:

      <img src="file:passport.jpg" />
      

      这对我来说很好。

      【讨论】:

        【解决方案4】:

        如果要指定图像的相对路径。

        假设您的项目文件夹结构如下:

        sample_project/images
        sample_project/images/loading.gif
        sample_project/src
        sampler_project/src/package_name

        现在图像标签将如下所示:
        "&lt;img src='file:images/loading.gif' width='100' height='100'&gt;"

        耶!

        【讨论】:

          【解决方案5】:

          我在 netbeans 工作时使用过它,但它确实有效。如果程序应该在netbeans之外运行,我想稍微修改一下,

          String imgsrc="";
          try {
              imgsrc = new File("passport.jpg").toURL().toExternalForm();
          } catch (MalformedURLException ex) {
             Logger.getLogger(EntityManager.class.getName()).log(Level.SEVERE, null, ex);
          }
          //System.out.println(imgsrc); use this to check
           html = "<img src='" + imgsrc + "' alt='' name='passport' width='74' height='85' /><br />";
          //use the html ...   
          

          如果从 jar 运行,图像文件必须在同一目录级别,... 实际上,图像文件必须与您的执行条目位于同一目录中。

          【讨论】:

          • "如果从 jar 中运行,图像文件必须在同一目录级别,.." 烂!请参阅 this answer 上的源代码,其中演示了如何通过相对引用加载图像,以及如何在 HTML 中使用 base 元素。基数也可以在 JEditorPane 方法中显式设置。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-08
          • 1970-01-01
          • 2014-12-18
          • 2015-05-16
          • 2017-05-20
          • 1970-01-01
          相关资源
          最近更新 更多