java - JLabel HTML 中的相对路径

标签 java html relative-path jlabel

我试图让 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/

相关文章:

javascript - JavaFX : Set default printer for WebEngine/Webview

iphone - 移动浏览器显示的 CSS 问题 (iPhone)

linux - c linux中如何将绝对路径转换为相对路径

java - 泛型、比较器和测试用例

java - 计算用于整数数组的希尔排序中的数组操作

java - 是否可以使用 RandomAccessFile 打印出 Student 对象?

html - 均匀分布的 HTML 元素

jquery - 在屏幕调整大小时调整 div 大小

python - 何时在 Python 中使用绝对路径与相对路径

perl - 使用 Perl-Mechanize : finalizing a little programme 进行 Dom 处理