## Cómo Utilizar CardLayout

Aquí tienes un applet que muestra un CardLayout en acción.

Cómo se ve en el applet anterior, la clase CardLayout ayuda a manejar dos o más componentes (normalmente ejemplares de la clase Panel) que comparten el mismo espacio. Conceptualmente, cada componente tiene un CardLayout que lo maneja como si jugaran a cartas o las colocaran en una pila, donde sólo es visible la carta superior. Se puede elegir la carta que se está mostrando de alguna de las siguientes formas:

- Pidiendo la primera o la última carta, en el orden en el que fueron añadidas al contenedor.
- Saltando a través de la baraja hacia delante o hacia atrás,
- Especificando la carta con un nombre especifico. Este es el esquema que utiliza el programa de ejemplo. Especificamente, el usuario puede elegir una carta (componente) eligiendo su nombre en una lista desplegable.

Abajo tienes el código que crea el CardLayout y los componentes que maneja. Aquí tienes el programa completo. El programa se puede ejecutar dentro de un applet con la ayuda de AppletButton, o como una aplicación.

    //Donde se declaren las variables de ejemplar:
    Panel cards;
    final static String BUTTONPANEL = "Panel with Buttons";
    final static String TEXTPANEL = "Panel with TextField";

    //Donde se inicialice el Panel:
    cards = new Panel();
    cards.setLayout(new CardLayout());

    ...//Crea un Panel llamado p1. Pone los botones en él.
    ...//Crea un Panel llamado p2. Pone un campo de texto en él.

    cards.add(BUTTONPANEL, p1);
    cards.add(TEXTPANEL, p2);

Cuando se añaden componentes a un controlador que utiliza un CardLayout, se debe utilizar la forma de dos argumentos del método add() del contenedor: add(String name, Component comp). El primer argumento debe ser una cadena con algo que identifique al componente que se está añadiendo.

Para elegir el componente mostrado por el CardLayout, se necesita algún código adicional. Aquí puedes ver cómo lo hace el applet de esta página:

    /Donde se inicialice el contenedor:
    . . .
        //Pone la lista en un Panel para que tenga un buen aspecto.
        Panel cp = new Panel();
        Choice c = new Choice();
        c.addItem(BUTTONPANEL);
        c.addItem(TEXTPANEL);
        cp.add(c);
        add("North", cp);

    . . .

    public boolean action(Event evt, Object arg) {
        if (evt.target instanceof Choice) {
            ((CardLayout)cards.getLayout()).show(cards,(String)arg);
            return true;
        }
        return false;
    }

Como se muestra en el código anterior, se puede utilizar el método show() de CardLayout para seleccionar el componente que se está mostrando. El primer argumento del método show() es el contenedor que controla CardLayout -- esto es, el contenedor de los componentes que maneja CardLayout. El segundo argumento es la cadena que identifica el componente a mostrar. Esta cadena es la misma que fue utilizada para añadir el componente al contenedor.

Abajo tienes todos los métodos de CardLayout que permiten seleccionar un componente. Para cada método, el primer argumento es el contenedor del que CardLayout es el controlador de disposición (el contenedor de las cartas que controla CardLayout).

    public void first(Container parent)
    public void next(Container parent)
    public void previous(Container parent)
    public void last(Container parent)
    public void show(Container parent, String name)

Ozito