2009-02-21 8 views
7

ho un JEditorPane creato da questo modo:risultati immagini su JEditorPane (Java Swing)

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

ho messo questo riquadro su un JFrame.

testo viene visualizzato correttamente, ma non riesco a vedere il quadro, c'è solo un quadrato che indica che non ci dovrebbe essere un'immagine (vale a dire: "immagine spezzata" dimostrato dai browser quando non è stata trovata la foto)

risposta

8

Devi fornire il tipo e ottenere la risorsa. È tutto. Il mio esempio testato, ma non sono sicuro della formazione. Speranza che aiuta:

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

Ho già provato in questo modo e ottengo mai un'eccezione di puntatore nullo :( – Giancarlo

+0

Non so dove hai ottenuto l'eccezione, ma puoi provare il mio esempio e inserire a.jpg nella stessa directory con questo class. puoi compilarlo come javac Test.java && eseguire java Test. E poiché non ho impostato la dimensione della finestra puoi impostarlo più grande per vedere l'immagine. – michal

+1

(ClassLoader.getSystemResource è un metodo statico. getResource sarebbe una scelta migliore) –

4

Il JEditorPane sta usando HTMLDocument.getBase per individuare gli URL relativi come bene, quindi se si sta visualizzando il contenuto da una directory, assicurarsi di impostare la base sul documento HTML in modo si risolve URL relativi alla directory di base.

A seconda di dove sia effettivamente l'immagine, è possibile estendere HTMLEditorKit + HTMLFactory + ImageView e fornire un'implementazione personalizzata di ImageView, responsabile anche della mappatura dell'URL degli attributi all'URL dell'immagine.

0

Ho usato questo quando stavo lavorando in netbeans, ha funzionato però. Penso che una piccola modifica se il programma deve essere eseguito al di fuori di 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 ... 

se si esegue dal vaso, il file di immagine deve essere sullo stesso livello di directory, ... infatti, il file immagine deve essere nella stessa directory della voce di esecuzione.

+1

* "se si esegue dal jar, il file immagine deve trovarsi allo stesso livello di directory, .." * Rot! Vedere le origini su [questa risposta] (http: // stackoverflow.it/questions/6373621/loading-images-from-jars-for-swing-html/6373907 # 6373907) che dimostra come caricare le immagini con riferimenti relativi, e come usare l'elemento 'base' nell'HTML. La base può anche essere impostata esplicitamente nei metodi 'JEditorPane'. –

3

Nessuno dei precedenti lavorato per me, però 'imgsrc = new File("passport.jpg").toURL().toExternalForm();' mi permetta di cercare di avere ogni immagine in html avere un 'file:' precede in modo che ora recita:

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

e che funziona bene per me.

1

Se si desidera specificare il percorso relativo all'immagine.

Diciamo che la struttura delle cartelle del progetto è la seguente:

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

Ora il tag di immagine sarebbe simile a questa:
"<img src='file:images/loading.gif' width='100' height='100'>"

Yaay!