отображение изображений на jeditorpane (java swing)

У меня есть JEditorPane, созданный таким образом:

JEditorPane pane = new JEditorPane("text/html", "<font face='Arial'>" + my_text_to_show + "<img src='/root/img.gif'/>" + "</font>");

Я поместил эту панель на JFrame.

текст отображается правильно, но я не вижу изображения, есть только квадрат, указывающий, что должно быть изображение (т. е. "сломанное изображение", показанное браузерами, когда изображение не найдено)

5 ответов


вы должны предоставить тип и получить ресурс. Вот и все. Мой проверенный пример, но я не уверен в формировании. Надеюсь, это поможет:

import java.io.IOException;
import javax.swing.JEditorPane;
import javax.swing.JFrame;

public class Test extends JFrame {

    public static void main(String[] args) throws Exception {
        Test.createAndShowGUI();
    }

    private static void createAndShowGUI() throws IOException {

        JFrame.setDefaultLookAndFeelDecorated(true); 

        JFrame frame = new JFrame("HelloWorldSwing");

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        String imgsrc = 
            Test.class.getClassLoader().getSystemResource("a.jpg").toString();
        frame.getContentPane().add(new JEditorPane("text/html",
            "<html><img src='"+imgsrc+"' width=200height=200></img>"));
        frame.pack();

        frame.setVisible(true);
    }
}

JEditorPane использует HTMLDocument.getBase также находит относительные URL-адреса, поэтому, если вы отображаете контент из каталога, обязательно установите базу в html-документе, чтобы он разрешал URL-адреса относительно базового каталога.

в зависимости от того, где это изображение на самом деле, вы можете расширить HTMLEditorKit+HTMLFactory+ImageView и предоставить пользовательскую реализацию ImageView, которая отвечает за сопоставление URL-адреса атрибута с URL-адресом изображения.


ни один из выше работал для меня, однако 'imgsrc = new File("passport.jpg").toURL().toExternalForm();' позвольте мне попробовать, чтобы каждое изображение в html имело предыдущий " файл:", чтобы он теперь читал:

<img src="file:passport.jpg" />

и это отлично работает для меня.


если вы хотите указать относительный путь к изображению.

Допустим, ваша структура папок проекта выглядит следующим образом:

sample_project/images
sample_project/images/loading.gif
sample_project/src
sampler_project/src/package_name

теперь тег будет выглядеть так:
"<img src='file:images/loading.gif' width='100' height='100'>"

ура-а-а!


я использовал это, когда работал в netbeans, это сработало. Я думаю, что небольшая модификация, если программа должна работать за пределами netbeans,

String imgsrc="";
try {
    imgsrc = new File("passport.jpg").toURL().toExternalForm();
} catch (MalformedURLException ex) {
   Logger.getLogger(EntityManager.class.getName()).log(Level.SEVERE, null, ex);
}
//System.out.println(imgsrc); use this to check
 html = "<img src='" + imgsrc + "' alt='' name='passport' width='74' height='85' /><br />";
//use the html ...   

Если вы запускаете из jar, файл изображения должен быть на том же уровне каталога, ... фактически, файл изображения должен находиться в том же каталоге, что и запись выполнения.