Objectif : Nous utilisons dans l'applet de classe JApplet, deux objets de classe JButton et un objet de classe JLabel. Notre applet affiche un texte dans la JLabel et la couleur du fond de cette JLabel change selon que l'on clique sur l'un ou l'autre des JButton. Nous reprenons un exemple déjà traité avec la bibiothèque Awt.
Travail à exécuter en Java
On vous donne le squelette général de l'applet en vous indiquant que les deux JButton doivent posséder chacun un écouteur sur l'événement actionPerformed (sensible au click de souris):
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
Démarrage
pour comparaison, le code de la version Awt est mentionné après le code Swing
état de l'applet Swing au départ code Swing correspondant jLabel1.setOpaque(true);
jLabel1.setText("ceci est un exemple");
jLabel1.setBounds(20, 71, 260, 17);
jButton1.setText("couleur bleue");
jButton1.setBounds(20, 135, 129, 27);
jButton2.setText("couleur jaune");
jButton2.setBounds(162, 136, 128, 27);
this.getContentPane().setBackground(Color.white);
this.getContentPane().setLayout(null);
this.getContentPane().add(jLabel1);
this.getContentPane().add(jButton1);
this.getContentPane().add(jButton2);
état de l'applet Awt au départ code Awt correspondant this.setLayout(null);
label1.setBackground(Color.lightGray);
label1.setText("Ceci est un exemple");
label1.setBounds(25, 32, 168, 17);
button1.setLabel("couleur bleue");
button1.setBounds(10, 110, 117, 26);
button2.setLabel("couleur jaune");
button2.setBounds(130, 110, 117, 25);
this.add(label1);
this.add(button1);
this.add(button2);Click sur bouton "couleur bleue"
pour comparaison, le code de la version Awt est mentionné après le code Swing
état de l'applet Swing après un click sur le bouton
"couleur bleue"code Swing correspondant
au click sur button1jLabel1.setText("Bouton bleu activé");
jLabel1.setBackground(Color.cyan);état de l'applet Awt après un click sur le bouton
"couleur bleue"code Awt correspondant
au click sur button1label1.setText("Bouton bleu activé");
label1.setBackground(Color.cyan);Click sur bouton "couleur jaune"
état de l'applet Swing après un click sur le bouton
"couleur jaune"code Swing correspondant
au click sur le boutonjLabel1.setText("Bouton jaune activé");
jLabel1.setBackground(Color.yellow);état de l'applet Awt après un click sur le bouton
"couleur jaune"code Awt correspondant
au click sur le boutonlabel1.setText("Bouton jaune activé");
label1.setBackground(Color.yellow);Redessinement applet
code Swing correspondant
au redessinement : la couleur de fond de la Label est la même que celle de l'appletcode Awt correspondant
au redessinement : la couleur de fond de la Label est la même que celle de l'appletpublic void paint ( Graphics x ) {
super.paint(x);
label1.setBackground( label1.getParent( ).getBackground( ));
}public void paint ( Graphics x ) {
label1.setBackground( label1.getParent( ).getBackground( ));
}Recommandation pour affichage Swing
public void paint ( Graphics x ) {
super.paint(x);
...............
}A la place de la surcharge de la méthode paint de JApplet et de l'appel au paint du parent (ici la classe parent d'une JApplet est la classe Applet) comme dans l'exemple précédent, le JDK recommande de plutôt d'utiliser la méthode "protected void paintComponent(Graphics g)" de la classe JComponent.
Pour plus d'informations reportez-vous au cours "Applet avec des swing\affichage Awt-Swing".
Construisez en recombinant les lignes de code Swing proposées, un programme complet d'applet correct.
2 - Proposition de solution Java :
Le code java de l'applet :
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;public class Applet_JLabelJButton extends JApplet {
JButton jButton2 = new JButton();
JButton jButton1 = new JButton();
JLabel jLabel1 = new JLabel();public void init() {
jLabel1.setOpaque(true);
jLabel1.setText("ceci est un exemple");
jLabel1.setBounds(20, 71, 260, 17);
jButton1.setText("couleur bleue");
jButton1.setBounds(20, 135, 129, 27);
jButton1.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton1_actionPerformed(e);
}
});
jButton2.setText("couleur jaune");
jButton2.setBounds(162, 136, 128, 27);
jButton2.addActionListener(
new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jButton2_actionPerformed(e);
}
});
this.getContentPane().setBackground(Color.white);
this.setSize(323, 180);
this.getContentPane().setLayout(null);
this.getContentPane().add(jLabel1);
this.getContentPane().add(jButton1);
this.getContentPane().add(jButton2);
}
void jButton2_actionPerformed(ActionEvent e) {
jLabel1.setText("Bouton jaune activé");
jLabel1.setBackground(Color.yellow);
}
void jButton1_actionPerformed(ActionEvent e) {
jLabel1.setText("Bouton bleu activé");
jLabel1.setBackground(Color.cyan);
}
public void paint(Graphics g){
super.paint(g);
jLabel1.setBackground(jLabel1.getParent().getBackground());
}
}
Le code HTML de la page appelant l'applet :
<HTML>
<HEAD>
<TITLE> Applet-Bonjour </TITLE>
</HEAD>
<BODY>
<p>Sortie de l'Applet-Bonjour :</p>
<APPLET CODE="Applet_JLabelJButton.class" WIDTH=400 HEIGHT=200>
</APPLET>
</BODY>
</HTML>