Utilisation d'un CardLayout

     

Il s'agit d'étudier l'utilisation d'un java.awt.CardLayout, gestionnaire de répartition qui permet d'avoir plusieurs composants graphiques tels que l'un d'entre eux seulement soit visible à un moment donné. Tout se passe comme si on avait un jeu de cartes et qu'on pouvait choisir la carte visible. On utilise la classe java.awt.CardLayout, que nous vous encourageons à consulter en ligne.

Ci-dessous, utilisez les boutons pour voir ce qui se passe.

 

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é)

Voici le code d'une application faisant surgir une fenêtre dont l'intérieur correspond à ce que l'on voit ci-dessus.

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;


class VoirCercle extends JPanel implements ActionListener {
JButton bouton1 = new JButton("trace");
JButton bouton2 = new JButton("efface");
boolean disque = false;

VoirCercle() {
bouton1.setActionCommand("tracer");
bouton2.setActionCommand("effacer");
add(bouton1);
add(bouton2);
bouton1.addActionListener(this);
bouton2.addActionListener(this);
setBackground(Color.CYAN);
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
if (disque) g.setColor(Color.RED);
else g.setColor(Color.CYAN);
g.fillOval(100, 50, 100, 100);
}

public void actionPerformed(ActionEvent e) {
String commande = e.getActionCommand();

if (commande.equals("tracer")) disque = true;
else if (commande.equals("effacer")) disque = false;
repaint();
}
}

public class Cartes extends JFrame implements ActionListener {
JButton precedent = new JButton("precedent");
JButton suivant = new JButton("suivant");
JButton leMessage = new JButton("message");
CardLayout gestionnaireDesCartes = new CardLayout();
JPanel jeuCartes = new JPanel();

public Cartes() {
JPanel p = new JPanel();
JTextArea zone = new JTextArea("Vous pouvez ecrie ici.");
JLabel message = new JLabel("Bonjour", SwingConstants.CENTER);
VoirCercle voirCercle = new VoirCercle();

jeuCartes.setLayout(gestionnaireDesCartes);
jeuCartes.setPreferredSize(new Dimension(200, 200));
jeuCartes.add(zone, "zone");
jeuCartes.add(voirCercle, "voir un cercle");
message.setOpaque(true);
jeuCartes.add(message, "message");
add(jeuCartes, BorderLayout.CENTER);
precedent.addActionListener(this);
suivant.addActionListener(this);
leMessage.addActionListener(this);
p.add(precedent);
p.add(suivant);
p.add(leMessage);
add(p, BorderLayout.SOUTH);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 250);
setVisible(true);
}

public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();

if (obj == precedent) {
gestionnaireDesCartes.previous(jeuCartes);
}
else if (obj == suivant) {
gestionnaireDesCartes.next(jeuCartes);
}
else if (obj == leMessage) {
gestionnaireDesCartes.show(jeuCartes,"message");
}
}
}
class EssaiCartes {
public static void main(String[] arg) {
new Cartes();
}
}

Vous pouvez voir :

  • le fichiers Carte.java donnant le code de l'application,
  • le fichiers CartesApplet.java donnant le code de l'applet qui apparaît ci-dessus.


    gestionnaireDesCartes.previous(jeuCartes); : on passe à la carte précédente.
    gestionnaireDesCartes.next(jeuCartes); : on passe à la carte suivante. On pourrait aussi utiliser les méthodes first et last de la classe CardLayout, qui donneraient la première ou la dernière carte.
    gestionnaireDesCartes.show(jeuCartes,"message"); : on passe à la carte dont le nom est message.

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