2009-02-21 64 views
7

que tienen un JEditorPane creado por esta manera:que muestran imágenes en JEditorPane (Java Swing)

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

pongo este panel en un JFrame.

texto se muestra correctamente, pero no puede ver la imagen, sólo hay un cuadrado que indica que debe haber una imagen (es decir: "rota imagen" mostrada por los navegadores cuando la imagen no se ha encontrado)

Respuesta

8

Tiene que proporcionar el tipo y obtener el recurso. Eso es todo. Mi ejemplo probado, pero no estoy seguro de formatear. Espero que ayude:

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); 
    } 
} 
+0

Ya lo he intentado de esta manera y alguna vez recibo una excepción de puntero nulo :( – Giancarlo

+0

No sé de dónde sacaste la excepción, pero puedes probar mi ejemplo. Y coloca a.jpg en el mismo directorio con este class. Puede compilarlo como javac Test.java && run java Test. Y como no he configurado el tamaño de la ventana, puede configurarlo para ver la imagen. – michal

+1

(ClassLoader.getSystemResource es un método estático. getResource sería una mejor opción.) –

4

El JEditorPane está utilizando HTMLDocument.getBase para localizar las direcciones URL relativas, así que si está viendo el contenido de un directorio, asegúrese de establecer la base en el documento html para que resuelva las direcciones URL relativas al directorio base.

Dependiendo de dónde se encuentre esa imagen, es posible que desee extender HTMLEditorKit + HTMLFactory + ImageView y proporcionar una implementación personalizada de ImageView, que también se encarga de asignar el atributo URL a la URL de la imagen.

0

Lo usé cuando estaba trabajando en netbeans, funcionó bien. Creo que una pequeña modificación si el programa debe funcionar fuera de 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 ... 

si se ejecuta desde el frasco, el archivo de imagen tiene que estar en el mismo nivel de directorio, ... de hecho, el archivo de imagen tiene que estar en el mismo directorio que su entrada de ejecución.

+1

* "si se ejecuta desde el contenedor, el archivo de imagen debe estar en el mismo nivel de directorio, ..." * ¡Rot! Consulte las fuentes en [esta respuesta] (http: // stackoverflow.com/questions/6373621/loading-images-from-jars-for-swing-html/6373907 # 6373907) que muestra cómo cargar imágenes por referencias relativas, y cómo usar el elemento 'base' en el HTML. La base también se puede configurar explícitamente en los métodos 'JEditorPane'. –

3

Ninguna de las anteriores trabajado para mí, sin embargo 'imgsrc = new File("passport.jpg").toURL().toExternalForm();' permítanme tratar de tener cada imagen en el html tener un 'archivo:' que precede de manera que ahora se lee:

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

y que funciona muy bien para yo.

1

Si desea especificar la ruta relativa a la imagen.

digamos que su estructura de carpetas del proyecto es el siguiente:

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

Ahora, la etiqueta de la imagen se vería así:
"<img src='file:images/loading.gif' width='100' height='100'>"

Yaay!