7 bis Cours ENPC, printemps 2001
Java, objets, interfaces et Internet

JApplet

La classe javax.swing.JApplet dérive de java.applet.Applet. En plus des fonctionnalités héritées de la classe Applet, un objet de type JApplet est un conteneur racine qui s'utilise comme un objet de type JFrame.

Les méthodes d'ajout / retrait de composants et de changement de gestionnnaire de placement ne doivent pas être directement appliquées à l'instance de JApplet mais à l'objet conteneur retourné par la méthode

getContentPane();
invoquée sur l'instance de JApplet. Par défaut, le gestionnaire de placement de ce conteneur est une instance de BorderLayout.

Si l'on veut dessiner soi-même l'apparence d'une JApplet, on doit le faire sur un objet sous-classe de JPanel dans lequel la méthode paintComponent est re-définie. On doit ajouter cet objet au conteneur retourné par l'appel à getContentPane().

Utilisation du Plug-in Java dans Netscape

Pour être utilisée, une applette doit être incluse dans une page HTML. Si le navigateur n'a pas tous les éléments nécessaires à l'exécution de l'applette, une solution est de lui adjoindre un module exécutable adéquat appelé Plug-in Java.

L'utilisation d'un Plug-in Java impose d'introduire l'applette dans la page HTML avec la balise <EMBED> en remplacement de la balise <APPLET>. L'exemple ci-dessous montre la conversion d'une balise APPLET vers une balise EMBED :

Balise APPLET :


<APPLET code="MonApplet.class" codebase="classes/"
align="baseline" width="200" height="200">
<PARAM NAME="vitesse" VALUE="100">    
APPLET non supportée : pas de SDK Java 2, Standard Edition v 1.2.2 !!!
</APPLET>

Balise EMBED :


<EMBED type="application/x-java-applet;version=1.2.2"
width="200" height="200"
align="baseline" code="MonApplet.class" codebase="classes/"
vitesse="100"
pluginspage="http://java.sun.com/products/plugin/1.2/plugin-install.html">
<NOEMBED>   
APPLET non supportée : pas de SDK Java 2, Standard Edition v 1.2.2 !!!
</NOEMBED>
</EMBED>
      

Combiner applette et application

Il est pratique de n'avoir qu'un seul programme pouvant à la fois être utilisé comme une applette et comme une application graphique autonome.

Pour cela, on implémente une applette (sous-classe de JApplet) qui contient une méthode main. La méthode main crée une instance de JFrame et une instance de l'applette. Elle invoque ensuite les méthodes init et start (si celle-ci est définie) de l'applette puis remplace le contenu du JFrame par celui de l'applette en invoquant la méthode setContentPane. Enfin, le JFrame est dimensionné et rendu visible.

Exemple :

import javax.swing.*;
import java.awt.*;

public class MonApplette extends JApplet {

  public void init()
  {
    Container cp = getContentPane();
    // Crée des composants :
    // ...
    // les ajoute à l'applette :
    cp.add(...);
    // ...
  }
  public void start() {...}
  public void stop() {...}
  public void destroy() {...}
  
  static void main(String args[]) {
    JFrame f = new JFrame();
    JApplet applet = new MonApplette();

    applet.init();
    applet.start(); // s'il y a lieu
    
    f.setContentPane(applet.getContentPane());
    f.setTitle("Ma jolie applette");
    f.setBounds(100,100,200,160); // Position et dimension de l'application
    f.setVisible(true);
    f.addWindowListener(new WindowAdapter () {
	public void windowClosing(WindowEvent e)
	{
	  System.exit(0);
	}
      });
  }
}

[Cours Java] [Notes 7] [Notes 8]