代码之家  ›  专栏  ›  技术社区  ›  kroiz

JLabel HTML中的相对路径

  •  4
  • kroiz  · 技术社区  · 16 年前

    但我无法让JLabel定位图像。当我使用绝对路径时,它工作得很好。

    我曾尝试从命令行或eclipse运行该程序,并添加对话框以显示当前工作目录的位置,但无济于事。 因此,我得出的结论是,在当前目录中没有搜索到该图像,这让我切中要害。在哪里查找图像?

    这是一个测试代码,显示了我在做什么:

    import javax.swing.*;
    
    public class HTMLLabel extends JFrame {
        public HTMLLabel() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            JOptionPane.showMessageDialog( this, 
                    System.getProperty("user.dir"));
    
             String html = "<html>\n" +
            "   <body>\n" +
            "       <div style=\"text-align: center;\">\n" + 
            "           <img src=\"file://s.png\">\n"+
            "       </div>\n"+
            "   </body>\n"+
            "</html>";
    
             JLabel label = new JLabel(html);
             add(label);
    
             pack();
             setVisible(true);
        } 
    
        public static void main(String[] args) {
             new HTMLLabel();
        }
    }
    
    4 回复  |  直到 16 年前
        1
  •  3
  •   Daniel De León    14 年前

    使用此函数为JLabel准备html文本,以显示与类包相关的图像。

    public static String prepareHtmlToJLabelText(Class relativeClass, String html) {
        Pattern p = Pattern.compile("src=['\"](.*?)['\"]");
        Matcher m = p.matcher(html);
        while (m.find()) {
            html = html.replace(m.group(), "src='" + relativeClass.getResource(m.group(1)) + "'");
        }
        return html;
    }
    

    例子:

    jLabel.setText(prepareHtmlToJLabelText(this.getClass(), "<html><div style='text-align: center;'><img src='imageA.png'></div>Bla bla bla...<div style='text-align: center;'><img src='imageB.png'></div>"));
    

    无论如何,要获得真正的html支持,请使用JEditorPane。

        2
  •  3
  •   user132371    16 年前

    我看到两种变体:

    我不知道为什么,但对我来说,这很有效

    "                       <img src=\"file:s.png\">\n"+
    

    假设s.png位于当前工作目录中。

    URL url = HTMLLabel.class.getResource( "/s.png" );
      String html = "<html>\n" +
        "       <body>\n" +
        "               <div style=\"text-align: center;\">\n" + 
        "                       <img src=\""+url+"\">\n"+
        "               </div>\n"+
        "       </body>\n"+
        "</html>";
    
        3
  •  2
  •   jitter    16 年前

    JLabel(Icon image)

    JLabel label = new JLabel(createImageIcon("s.png","description"));
    
    protected ImageIcon createImageIcon(String path, String description) {
      java.net.URL imgURL = getClass().getResource(path);
      if (imgURL != null) {
        return new ImageIcon(imgURL, description);
      } else {
        System.err.println("Couldn't find file: " + path);
        return null;
      }
    }
    

    btw文件协议使用3个斜杠( file://s.png 无效)以及 file:///s.png C:\s.png 。如果映像位于起始目录中,则可以使用。

    String path = System.getProperty("user.dir");
    String html =
      "<html>\n" +
         "<body>\n" +
            "<div style=\"text-align: center;\">\n" +
              "<img src=\"file:///"+path+"/s.png\">\n"+
            "</div>\n"+
         "</body>\n"+
      "</html>";
    

        4
  •  0
  •   Mateen    11 年前

    我刚换了你的

    <img src=\"file://s.png\">\n"
    //with
    <img src=\"file:///s.png\">\n"+
    

    这就解决了问题

    注意:我将s.png文件放在src/java文件夹中