показ изображений на jeditorpane (java качели)

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

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

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

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


person Giancarlo    schedule 21.02.2009    source источник


Ответы (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);
    }
}
person michal    schedule 21.02.2009
comment
Я уже пробовал этот способ, и я всегда получаю исключение нулевого указателя :( - person Giancarlo; 21.02.2009
comment
Я не знаю, где вы взяли исключение, но вы можете попробовать мой пример. И поместите .jpg в тот же каталог с этим классом. вы можете скомпилировать его как javac Test.java && запустить java Test. И поскольку я не устанавливал размер окна, вы можете увеличить его, чтобы увидеть изображение. - person michal; 21.02.2009
comment
(ClassLoader.getSystemResource — это статический метод. GetResource был бы лучшим выбором.) - person Tom Hawtin - tackline; 21.02.2009

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

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

person John Gardner    schedule 21.02.2009

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

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

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

person ahh22    schedule 10.04.2012

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

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

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

Ура!

person oozzal    schedule 30.11.2013

Я использовал это, когда работал в 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, файл изображения должен находиться на том же уровне каталога, ... на самом деле, файл изображения должен находиться в том же каталоге, что и ваша запись выполнения.

person Peter    schedule 15.08.2011
comment
если вы запускаете из банки, файл изображения должен находиться на том же уровне каталога,.. Гниль! См. источники в этом ответе, в которых показано, как загружать изображения по относительным ссылкам, а также как использовать элемент base в HTML. Базу также можно задать явно в методах JEditorPane. - person Andrew Thompson; 15.08.2011