views:

1050

answers:

5

Is there a fairly simple way to open a web page within a GUI's JPanel?

If not, how do you open a web page with the computer's default web browser?

I am hoping for something that I can do with under 20 lines of code, and at most would need to create one class. No reason for 20 though, just hoping for little code...

I am planning to open a guide to go with a game. The guide is online and has multiple pages.. but the pages link to each other, so i am hoping i only have to call one URL with my code.

+1  A: 

There are two standard ways that I know of:

  1. The standard JEditorPane component
  2. Desktop.getDesktop().browse(URI) to open the user's default browser (Java 6 or later)

    Soon, there will also be a third:

  3. The JWebPane component, which apparently has not yet been released

JEditorPane is very bare-bones; it doesn't handle CSS or JavaScript, and you even have to handle hyperlinks yourself. But you can embed it into your application more seamlessly than launching FireFox would be.

Here's a sample of how to use hyperlinks (assuming your documents don't use frames):

// ... initialize myEditorPane
myEditorPane.setEditable(false); // to allow it to generate HyperlinkEvents
myEditorPane.addHyperlinkListener(new HyperlinkListener() {
    public void hyperlinkUpdate(HyperlinkEvent e) {
        if (e.getEventType() == HyperlinkEvent.EventType.ENTERED) {
            myEditorPane.setToolTipText(e.getDescription());
        } else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) {
            myEditorPane.setToolTipText(null);
        } else if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
            try {
                myEditorPane.setPage(e.getURL());
            } catch (IOException ex) {
                // handle error
                ex.printStackTrace();
            }
        }
    }
});
Michael Myers
Just curious, but how could I have improved this answer?
Michael Myers
saua said "JEditorPane has some HTML ability, but it's very limited and not suiteable for a general-purpose browser." so i just went with the more simplistic one line of code saua posted... I was not going for something very nice looking, i am just trying to put together something that functions
GA Tech Mike
I will probably give your code a try later on, but i did not try to run it... so i did not want to click that it was an answer since i don't actually know
GA Tech Mike
Well, I also gave you saua's way before saua posted it. That's what the last sentence is referring to (did I make it unclear?).
Michael Myers
yea, i saw them both at the same time and he had the code in the box thing, so it stuck out more.. i did not realize you posted the same thing..
GA Tech Mike
i tend to read the starts of something which i kinda expect to be a quick summary of the rest of the post... so i guess you could mention the different methods at the beginning and then explain each one after that
GA Tech Mike
Good point. (And thanks for answering the question in my first comment!)
Michael Myers
A: 

I don't know if such a built-in exists, but I would use the Runtime class's exec with iexplore.exe or firefox.exe as an argument.

Geo
If you do it with Runtime you would need to know wich browser the user runs. Hardly the best option
Nuno Furtado
So you check for the presence of 3 browsers. I never said this was the best option.
Geo
+3  A: 

Opening a web page on the default web page is easy:

java.awt.Desktop.getDesktop().browse(theURI);

Embedding a browser is not so easy. JEditorPane has some HTML ability (if I remember my limited Swing-knowledge correctly), but it's very limited and not suiteable for a general-purpose browser.

Joachim Sauer
Desktop API is only for java 1.6
dfa
@dfa: so? There was no requirement for anything earlier and it's reasonable to use up-to-date APIs.
Joachim Sauer
A: 

If you're developing an applet, you can use AppletContext.showDocument. That would be a one-liner:

getAppletContext().showDocument("http://example.com", "_blank");

If you're developing a desktop application, you might try Bare Bones Browser Launch.

Rich Apodaca
A: 

haven't tried it at all, but the cobra HTML parser and viewer from the lobo browser, a browser writen in pure java, may be what you're after. They provide sample code to set up an online html viewer:

import javax.swing.*;
import org.lobobrowser.html.gui.*;
import org.lobobrowser.html.test.*;

public class BareMinimumTest {
  public static void main(String[] args) throws Exception {
    JFrame window = new JFrame();
    HtmlPanel panel = new HtmlPanel();
    window.getContentPane().add(panel);
    window.setSize(600, 400);
    window.setVisible(true);
    new SimpleHtmlRendererContext(panel, new SimpleUserAgentContext())
    .navigate("http://lobobrowser.org/browser/home.jsp");
  }
}
cobbal