2009-02-21 14 views
7

Ich habe einen JEditorPane auf diese Weise erstellt:zeigt Bilder auf JEditorPane (Java Swing)

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

ich diese Scheibe auf einem JFrame.

Text korrekt angezeigt wird, aber ich kann das Bild nicht sehen, gibt es nur einen Platz anzeigt, dass es ein Bild sein (das heißt: „broken image“ von Browsern angezeigt, wenn hat Bild nicht gefunden wurde)

Antwort

8

Sie müssen den Typ angeben und die Ressource abrufen. Das ist alles. Mein getestetes Beispiel, aber ich bin mir nicht sicher über die Formatierung. Hoffe, es hilft:

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

Ich habe schon diesen Weg versucht und ich jemals eine Nullzeiger Ausnahme bekommen :( – Giancarlo

+0

Ich weiß nicht, wo Sie die Ausnahme, aber Sie können mein Beispiel versuchen. Und a.jpg in das gleiche Verzeichnis mit diesem Sie können es kompilieren als javac Test.java && run java Test. Und weil ich die Größe des Fensters nicht eingestellt habe, können Sie es größer setzen, um Bild zu sehen. – michal

+1

(ClassLoader.getSystemResource ist eine statische Methode. getResource wäre eine bessere Wahl.) –

4

Die JEditorPane HTMLDocument.getBase verwendet als auch relative URLs zu finden, so dass, wenn Sie Inhalte aus einem Verzeichnis angezeigt wird, stellen Sie sicher, dass die Basis auf dem HTML-Dokument zu setzen, so löst es Urls relativ zum Basisverzeichnis.

Je nachdem, wo sich dieses Bild tatsächlich befindet, können Sie HTMLEditorKit + HTMLFactory + ImageView erweitern und eine benutzerdefinierte Implementierung von ImageView bereitstellen, die auch für die Zuordnung der Attribut-URL zur Bild-URL verantwortlich ist.

0

Ich benutzte dies, als ich in Netbeans arbeitete, es funktionierte jedoch. Ich denke, eine kleine Änderung, wenn das Programm sollte außerhalb von 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 ... 

laufen, wenn Sie aus dem Glas laufen, die Image-Datei auf der gleichen Verzeichnisebene sein muss, ... in der Tat, die Bilddatei muss sich im selben Verzeichnis wie der Ausführungseintrag befinden.

+1

* "Wenn Sie von der jar ausführen, muss die Image-Datei auf der gleichen Verzeichnisebene sein, .." * Rot! Siehe die Quellen auf [diese Antwort] (http: // stackoverflow.com/questions/6373621/loading-images-from-jars-for-swing-html/6373907 # 6373907), das zeigt, wie Bilder durch relative Verweise geladen werden, sowie die Verwendung des 'base'-Elements im HTML. Die Basis kann auch explizit in den Methoden 'JEditorPane' gesetzt werden. –

3

Keine der oben für mich gearbeitet, aber 'imgsrc = new File("passport.jpg").toURL().toExternalForm();' lassen Sie mich jedes Bild, um zu versuchen und haben in den HTML-Code haben ein vorhergehendes ‚file:‘, so dass es jetzt heißt es:

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

Und das funktioniert gut für mich.

1

Wenn Sie den relativen Pfad zum Bild angeben möchten.

sagen Lassen Sie Ihre Projektordnerstruktur, wie folgend:
"<img src='file:images/loading.gif' width='100' height='100'>"

Yaay:

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

nun wie folgt aus der Image-Tag aussehen würde!