在JLabel的HTML相对路径
-
22-09-2019 - |
题
我试图使JLabel的显示,其使用相对路径引用的图像的HTML。 但我不能让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();
}
}
解决方案
使用该功能以制备用于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;
}
该函数代替“src”属性的内容,以使其相对于所述提供者类。
示例:
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中。
其他提示
我看到两个变体:
我不知道为什么,但我这个作品
" <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>";
为什么你甚至做这样的吗?只要使用本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;
}
}
或者,如果你坚持HTML变种。
顺便说一句文件协议使用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>";
但我不作任何保证关于第二溶液。
我刚更换了你的
<img src=\"file://s.png\">\n"
//with
<img src=\"file:///s.png\">\n"+
和其解决了这个问题
请注意:ⅰ置于s.png文件在src / java文件夹
不隶属于 StackOverflow