JuanDeLosMuertos
JuanDeLosMuertos

Reputation: 4620

showing images on jeditorpane (java swing)

I have a JEditorPane created by this way:

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

I put this pane on a JFrame.

Text is shown correctly, but I can't see the picture, there is only a square indicating that there should be an image (i.e.: "broken image" shown by browsers when picture has not been found)

Upvotes: 9

Views: 21080

Answers (5)

oozzal
oozzal

Reputation: 2451

If you want to specify relative path to the image.

Let's say your project folder structure is as following:

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

Now the image tag would look like this:
"<img src='file:images/loading.gif' width='100' height='100'>"

Yaay!

Upvotes: 1

ahh22
ahh22

Reputation: 31

None of the above worked for me, however 'imgsrc = new File("passport.jpg").toURL().toExternalForm();' let me to try and have each image in the html have a preceding 'file:' so that it now reads:

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

And that works fine for me.

Upvotes: 3

Peter
Peter

Reputation: 6669

I used this when I was working in netbeans, it worked though. I think a little modification if the program should run outside of 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 ...   

if you run from the jar, the image file has to be on the same directory level, ... in fact, the image file has to be on the same directory as your execution entry.

Upvotes: 0

John Gardner
John Gardner

Reputation: 25146

The JEditorPane is using HTMLDocument.getBase to locate relative urls as well, so if you are displaying content from a directory, make sure to set the base on the html document so it resolves urls relative to the base directory.

Depending on where that image actually is, you might want to extend HTMLEditorKit+HTMLFactory+ImageView and provide a custom implementation of ImageView, which is responsible for mapping the attribute URL to the image URL, too.

Upvotes: 5

michal
michal

Reputation: 208

You have to provide type, and get the resource. That's all. My tested example, but I'm not sure about formating. Hope it helps:

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

Upvotes: 9

Related Questions