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