2009-04-14 12 views
12

C'è un modo semplice per aprire una pagina Web all'interno di una JPanel della GUI?Come si aprono le pagine Web in Java?

In caso contrario, come si apre una pagina Web con il browser Web predefinito del computer?

Sto sperando in qualcosa che posso fare con meno di 20 righe di codice e al massimo avrei bisogno di creare una classe. Nessun motivo per 20, sperando solo per un piccolo codice ...

Sto progettando di aprire una guida per andare con un gioco. La guida è online e ha più pagine, ma le pagine si linkano tra loro, quindi spero di dover chiamare un solo URL con il mio codice.

+1

Eventuali duplicati di [Getting java gui per aprire una pagina web nel browser web] (http: // stackoverflow.com/questions/602032/getting-java-gui-to-open-a-webpage-in-web-browser) – Nathan

+0

Vedere anche http://stackoverflow.com/questions/6360744/how-to-render-basic -html-markup-dentro-a-jpanel-in-java-swing –

risposta

26

Apertura di una pagina web con il browser web di default è facile:

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

Incorporare un browser non è così facile. JEditorPane ha dell'abilità HTML (se ricordo correttamente la mia conoscenza Swing limitata), ma è molto limitata e non adatta per un browser generico.

+0

L'API desktop è solo per java 1.6 – dfa

+7

@dfa: così? Non è stato richiesto alcunché prima ed è ragionevole utilizzare API aggiornate. –

+2

Si noti che se l'URI è una stringa, è necessario avvolgerla con 'new java.net.URI (l'URI)' –

2

Ci sono due modi standard che io conosca:

  1. Lo standard JEditorPane componente
  2. Desktop. getDesktop(). browse(URI) per aprire il browser predefinito dell'utente (Java 6 o superiore)

    Presto, ci sarà anche un terzo:

  3. La componente JWebPane, che a quanto pare non è ancora stato rilasciato

JEditorPane è molto ossa nude; non gestisce CSS o JavaScript e devi anche gestirli da solo. Ma puoi incorporarlo nella tua applicazione in modo più semplice rispetto al lancio di FireFox.

Ecco un esempio di come utilizzare i collegamenti ipertestuali (supponendo che i documenti non utilizzare frame):

// ... 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(); 
      } 
     } 
    } 
}); 
+0

Solo curioso, ma come avrei potuto migliorare questa risposta? –

+0

saua ha dichiarato: "JEditorPane ha alcune capacità HTML, ma è molto limitato e non è adatto per un browser generico". quindi sono andato con la più semplicistica riga di codice saua postata ... Non volevo qualcosa di molto bello, sto solo cercando di mettere insieme qualcosa che funzioni –

+0

Probabilmente darò una prova al tuo codice più tardi, ma non ho provato a farlo funzionare ... quindi non volevo fare clic che era una risposta dato che in realtà non lo so –

-1

Non so se tale un built-in esiste, ma vorrei utilizzare la classe di Runtimeexec con iexplore.exe o firefox.exe come argomento.

+0

Se lo si fa con Runtime, è necessario sapere quale browser viene eseguito dall'utente. Difficilmente l'opzione migliore –

+0

Quindi si controlla la presenza di 3 browser. Non ho mai detto che questa fosse l'opzione migliore. – Geo

0

Se si sta sviluppando un'applet, è possibile utilizzare AppletContext.showDocument. Sarebbe una battuta:

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

Se si sta sviluppando un'applicazione desktop, si potrebbe provare Bare Bones Browser Launch.

0

non ho provato affatto, ma il cobra HTML parser and viewer da lobo browser, un browser scritto in puro java, potrebbe essere quello che stai dopo.Essi forniscono codice di esempio per impostare un visualizzatore html on-line:

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

Si prega di provare sottostante Codice:

import java.awt.Desktop; 
import java.net.URI; 
import java.net.URISyntaxExaception; 

//below is the code 
//whatvever the url is it has to have https:// 

Desktop d = Desktop.getDesktop(); 
try { 
    d.browse(new URI("http://google.com")); 
} catch (IOException | URISyntaxException e2) { 
    e2.printStackTrace(); 
} 
Problemi correlati