показ изображений на jeditorpane (java swing) - PullRequest
7 голосов
/ 21 февраля 2009

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

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

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

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

Ответы [ 5 ]

8 голосов
/ 21 февраля 2009

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

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);
    }
}
4 голосов
/ 22 февраля 2009

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

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

3 голосов
/ 10 апреля 2012

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

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

И это прекрасно работает для меня.

1 голос
/ 30 ноября 2013

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

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

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'>"

Yaay!

0 голосов
/ 15 августа 2011

Я использовал это, когда работал в 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 ...   

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

...