5

相対パスを使用して画像を参照しているhtmlをJLabelに表示させようとしています。しかし、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

4 に答える 4

3

2つのバリエーションがあります。

理由はわかりませんが、私にとってはこれでうまくいきます

"                       <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>";
于 2009-10-20T10:52:39.270 に答える
3

この関数を使用して、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 を使用してください。

于 2012-05-20T18:43:30.733 に答える
2

なぜあなたはこのようなことをしているのですか?この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>";

ただし、2番目のソリューションについては保証しません。

于 2009-10-20T10:49:18.573 に答える
0

私はちょうどあなたを交換しました

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

そしてそれは問題を解決しました

注:s.pngファイルをsrc/javaフォルダーに配置しました

于 2014-10-13T06:41:55.500 に答える