Java – LayoutManager – CardLayout


/**
 * CardLayoutDemo.java
 *
 * Ejemplo de CardLayout.
 */

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Container;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

/**
 * Clase que extiende de JFrame para heredar toda su funcionalidad e implementa la interface
 * ItemListener para poder escuchar y manejar eventos sobre el combo box.
 *
 * @author Dark[byte]
 */
class CardLayoutDemo extends JFrame implements ItemListener {

    private JPanel cards;
    final static String PANELBOTONES = "Panel con botones";
    final static String PANELTEXTO   = "Panel con campo de texto";

    /**
     * Constructor de la clase.
     *
     * Construimos la GUI de nuestro programa, la configuramos, la centramos
     * en pantalla y la hacemos visible.
     */
    public CardLayoutDemo() {
        super("CardLayout Demo");

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        /** tomamos el panel de contenido y le insertamos un BorderLayout 
            definido en un espacio vertical de 15 pixels */
        Container contenedor = getContentPane();
        contenedor.setLayout(new BorderLayout(0, 15));

        String comboBoxItems[] = {
            PANELBOTONES,
            PANELTEXTO
        };

        /** creamos un combo box pasandole un array con los items que tendrá,
            lo definimos como no editable y le agregamos un ItemListener */
        JComboBox combobox = new JComboBox(comboBoxItems);
        combobox.setEditable(false);
        combobox.addItemListener(this);

        //creamos la tarjeta 1 que contendra el panel de botones
        JPanel card1 = new JPanel();
        JButton boton1 = new JButton("Boton 1");
        JButton boton2 = new JButton("Boton 2");
        JButton boton3 = new JButton("Boton 3");
        card1.add(boton1);
        card1.add(boton2);
        card1.add(boton3);

        //creamos la tarjeta 2 que contendrá el panel con campo de texto
        JPanel card2 = new JPanel();
        JTextField texto = new JTextField("Campo de texto", 20);
        card2.add(texto);

        //creamos el panel que contiene las tarjetas
        cards = new JPanel(new CardLayout());
        cards.add(card1, PANELBOTONES);
        cards.add(card2, PANELTEXTO);

        //agregamos los componentes al panel de contenido principal
        contenedor.add(combobox, BorderLayout.NORTH);
        contenedor.add(cards, BorderLayout.CENTER);

        pack();
        setVisible(true);
        setLocationRelativeTo(null);
    }

    /**
     * Atendemos y manejamos los eventos sobre el combo box.
     * 
     * @param ie evento disparado
     */
    public void itemStateChanged(ItemEvent ie) {
        /** en el espacio del panel de las tarjetas colocamos el panel que
              corresponde al nombre de la opcion seleccionada en el combo box */
        ((CardLayout) cards.getLayout()).show(cards, (String) ie.getItem());
    }

    /**
     * Punto de entrada del programa.
     *
     * Instanciamos esta clase para su construcción.
     *
     * @param args argumentos de la línea de comandos.
     */
    public static void main(String[] args) {
        new CardLayoutDemo();
    }
}

, , , ,

  1. Deja un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s

A %d blogueros les gusta esto: