Créer un navigateur web en java

Il existe plusieurs librairies en Java qui permettent d'afficher une page web, mais la plupart entre eux ont été abandonnées il y a quelques années. Dans cet article, nous allons voir comment créer un navigateur et afficher le contenu d'un site web.

On peut afficher une page web avec trois façons:
  • JEditorPane: inclut dans le JRE, mais affiche seulement les pages HTML simples.
  • JWebBrowser: intègre le navigateur internet Explorer.
  • JxBrowser: intègre le navigateur Chromium, c'est le moyen le plus efficace parce qu'il permet l'affichage des pages web modernes conçues avec HTML5/CSS3, JavaScript, Siverlight...Le seul inconvénient est qu'il est payant.

La classe JEditorPane

La classe JEditorPane permet d'afficher seulement le contenu HTML, JEditorPane est utile lorsqu'on veut ouvrir et contrôler l'affichage des fichiers HTML.

L'exemple suivant affiche une page web HTML simple sans CSS.

import javax.swing.text.html.HTMLEditorKit;
import javax.swing.*;
import java.io.*;
import java.net.URL;
import java.awt.*;

public class JEditorTest {

public static void main(String[] args) {

JEditorPane jep = new JEditorPane();
jep.setEditable(false);
jep.setBackground(Color.WHITE);

jep.setBounds(316, 110, 598, 545);

HTMLEditorKit kit = new HTMLEditorKit();

jep.setEditorKit(kit);

try {
jep.setPage(new URL("http://imss-www.upmf-grenoble.fr/prevert/Prog/Java/swing/JEditorPane.html"));

}
catch (IOException e) {
jep.setContentType("text/html ");
jep.setText("imposible de visualiser la page");
}

JScrollPane scrollPane = new JScrollPane(jep);
JFrame f = new JFrame();
// Next line requires Java 1.3
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(scrollPane);
f.setSize(512, 342);
f.show();
}
}
Sortie:

JEditorPane - visualiser une page web en java

L'affichage obtenu est statique et on peut rien faire à part la visualisation. On veut rendre les hyperliens cliquables en associant un listener aux hyperliens:

jep.addHyperlinkListener(new HyperlinkListener() {
public void hyperlinkUpdate(HyperlinkEvent e) {
if(e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
JEditorPane jepane = (JEditorPane)e.getSource();
try {
jepane.setPage(e.getURL());
}catch (IOException ex) {
jepane.setText("ERREUR : "+ex.getMessage());
}
}
}
});
JEditorPane permet aussi d'obtenir les informations ou d'éditer une page web.

JWebBrowser

JWebBrowser est une librairie qui permet une intégration facile dans les composants de l'application Swing pour créer un navigateur web qui importe Internet Explorer ou Mozilla sur Windows et Mozilla sur les autres systèmes d'exploitation. Il faut que la dernière version d'internet Explorer soit installée pour éviter le décalage des composants et les feuilles de style CSS.

Le développement de JWebBrowser est basée sur les framework et une implémentation de SWT qui fournit des composants riches. JWebBrowser offre un navigateur riche contenant un Flash player, un lecteur multimédia et un éditeur HTML.

Voici le lien pour télécharger la librairie JWebBrowser. Vous pouvez aussi télécharger et tester l'application en ligne ici.

L'utilisation de JWebBrowser est très simple comme montré dans le code suivant:

 import java.awt.BorderLayout;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import chrriis.common.UIUtils;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JWebBrowser;

public class JWebBrowser {

public static JComponent createContent() {
JPanel contentPane = new JPanel(new BorderLayout());
JWebBrowser webBrowser = new JWebBrowser();
webBrowser.navigate("http://www.orange.fr");
contentPane.add(webBrowser);
return contentPane;
}

public static void main(String[] args) {
NativeInterface.open();
UIUtils.setPreferredLookAndFeel();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(createContent(),
BorderLayout.CENTER);
frame.setSize(800, 600);
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
});
NativeInterface.runEventPump();
}
}

JWebBrowser - navigateur web en java

JxBrowser

JxBrowser est l'API la plus complète parce qu’elle intègre le navigateur Chromium qui est une extension de Chrome pour linux. JxBrowser est fait avec Swing et JavaFX, ce qui rendre l'affichage des pages web conçues en HTML5/CSS3, JavaScript, Siverlight... excellent et sans aucun problème.

L'API JxBrowser est payante et très coûteuse, elle est conseillée seulement si vous en avez vraiment besoin et dans les grandes entreprises. Une version d'évaluation d'un mois est offerte, il suffit d'entrer votre nom et votre adresse email tout en bas de page pour obtenir la clé de la licence.

Voici le lien de téléchargement de JxBrowser à partir de leur site officiel. Vous pouvez aussi exécuter le demo et tester l'application.

Le code suivant montre l'utilisation de la librairie JxBrowser.

import java.awt.BorderLayout;
import javax.swing.JFrame;
import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;

public class JxBrowserTest {
public static void main(String[] args) {
Browser browser = new Browser();
BrowserView view = new BrowserView(browser);

JFrame frame = new JFrame();
frame.add(view, BorderLayout.CENTER);
frame.setSize(700, 500);
frame.setVisible(true);

browser.loadURL("http://www.youtube.com");
}
}

Navigateur web java avec JwBrowser

Références:
How to Use Editor Panes and Text Panes
JWebBrowser Class (DJ Native Swing - SWT) - The DJ project
Class JWebBrowser