Charger des ressources pour une applet (image, fichier texte, sons)

     

alt : l'applet n'est pas visible par votre navigateur (dans le menu Outils, Modules complémentaires, activer le plugin Java(TM) Platform SE 6 U32 6.0.320.5 s'il est désactivé)

Le code de notre applet est ci-dessous. Pour apprendre comment charger des ressources dans une applet, le mieux est de regarder les lignes en rouge.

import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.io.InputStream;
import java.net.URL;
import java.util.Scanner;

import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
class PanneauDessin extends JPanel {
private Image image;
private String texte;
private int largeur = 300, hauteur = 300;

public PanneauDessin(Image image, String texte) {
super();
this.image = image;
this.texte = texte;
setPreferredSize(new Dimension(largeur, hauteur));
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, largeur, hauteur, this);
g.drawString(texte, 10, 50) ;
}
}

@SuppressWarnings("serial")
class PanneauCharge extends JPanel implements ActionListener {
private JButton jouer = new JButton("jouer");
private AudioClip son;

PanneauCharge(AudioClip son, Image image, InputStream data) {
this.son = son;
jouer.addActionListener(this);

Scanner lecteur = new Scanner(data);
String texte = lecteur.nextLine();

setLayout(new BorderLayout());
JPanel panneauBouton = new JPanel();
panneauBouton.add(jouer);
add(panneauBouton, BorderLayout.NORTH);
add(new PanneauDessin(image, texte), BorderLayout.CENTER);
}

public void actionPerformed(java.awt.event.ActionEvent e) {
son.play();
}
}

@SuppressWarnings("serial")
public class ChargeApplet extends JApplet {

public void init() {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
try {
URL urlSon = PanneauCharge.class.getResource("oiseau.au");
AudioClip son = Applet.newAudioClip(urlSon); Image image = getImage(getCodeBase(), "lune.gif");

URL urlTexte = PanneauCharge.class.getResource("phrase.txt");
InputStream data = urlTexte.openStream();

PanneauCharge ihm = new PanneauCharge(son, image, data);
setLayout(new FlowLayout(FlowLayout.CENTER));
getContentPane().add(ihm);
}
catch(Exception exc) {
showStatus(exc.toString());
}
}
});
}
catch (Exception e) {
System.err.println("Impossible de lancer correctement l'applet");
}
}
}

PanneauCharge.class.getResource("oiseau.au"); : PanneauCharge.class est l'instance de la classe java.lang.Class correspondant à la classe PanneauCharge ; la méthode getResource est une méthode d'instance de la classe Class qui retourne l'URL correspondant au nom indiqué.
getCodeBase() : il s'agit d'une méthode définie dans la classe java.applet.Applet dont hérite la classe JApplet.

© Irène Charon, Télécom ParisTech 2011