我试图使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。
关于java - JLabel HTML中的相对路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1593742/