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.
-
There are two standard ways that I know of:
- The standard
JEditorPane
component Desktop
.getDesktop()
.browse(URI)
to open the user's default browser (Java 6 or later)Soon, there will also be a third:
- 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?GA Tech Mike : 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 functionsGA 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 knowMichael Myers : 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?).GA Tech Mike : 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 thatMichael Myers : Good point. (And thanks for answering the question in my first comment!) - The standard
-
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.
Nuno Furtado : If you do it with Runtime you would need to know wich browser the user runs. Hardly the best optionGeo : So you check for the presence of 3 browsers. I never said this was the best option. -
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.dfa : Desktop API is only for java 1.6Joachim Sauer : @dfa: so? There was no requirement for anything earlier and it's reasonable to use up-to-date APIs. -
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.
-
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"); } }
0 comments:
Post a Comment