Charger des ressources pour une applet                        

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

     

alt : l'applet n'est pas visible par votre navigateur ; pour voir l'application, vous devez télécharger le code, le compiler et l'exécuter

Le code de notre applet est ci-dessous. Pour apprendre comment charger 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