JAVA: Practicando con CardLayout

19 03 2009

CardLayout,  es un manejador de disenio que nos permite, ubicar componentes swing dentro de un mismo contenedor, y poder visualizarlos solamente uno a la vez.

Este layout es usado por los JTabbedPane, con la diferencia de la separacion de los bordes de cada panel.

Es decir, podemos tener un contenedor pricipal,   y dentro de el, varios paneles, y atravez de una seleccion, elegir cual de estos paneles queremos q se visualize.

Primero tenemos que crear el contenedor(JFrame, JPanel, etc), y luego atravez del metodo “setLayout()” asignarle el layout correspondiente.

JFrame frame = new JFrame();
frame.setLayout(new CardLayout());

Una vez, asiganado el layout al contenedor, tendremos q agregar los componentes, plenamente ya declarados y creados.

Para agregar necesitamos 2 argumentos, el objeto a agregar, y un nombre referencial al elemento agregado

JPanel panel = new JPanel();
JPanel pane2 = new JPanel();
frame.add(panel, referenciaPanel1);
frame.add(pane2, referenciaPanel2);

Sencilo no?, espera, hay unos metodos basicos e importantes, al momento de manejar los eventos, como son.

first (nombreContenedor) -> metodo q permite visualizar el primer objeto agregado

next (nombreContenedor) -> metodo q permite visuliza el objeto siguiente.

previous (nombreContenedor) -> permite visualizar el objeto anterior

show (nombreContenedor, referenciaPanel) -> permite visualizar un obejto especificado, aqui necesitamos el nombre del contenedor y el nombre referencial asignado al momento de agregarlo.

Para esta entrada he preparado un ejemplo clasico, para situaciones clasicas…jejee

La aplicacio, contiene, 1 JFrame principal, 1 PanelSuperior incluido en el JFrame,1 JComboBox incluido en el PanelSuperior, 1 PanelInferior incluido en el JFrame, y 3 paneles incluidos en el PanelInferior.

El ejemplo consciste en que atravez de un JComboBox, seleccionaremos un elemento de la lista, y segun el elemento seleccionado, cambiara el panel inferior mostrando uno de los paneles incluidos en el., es decir, el panel ira cambiando segun la seleecion del elemento de la lista del JComboBox.

YA q en este ejericcio he utilizado manejo de eventos, he trabajado con 2 clases, la primera (WindowCardLayout) es la interfaz de usuario y la segunda (ControlCardLayout) la q maneja los eventos de la primera.

Aqui el fuente.WindowCardLayout

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JComboBox;
import javax.swing.WindowConstants;
import javax.swing.BorderFactory;
import java.awt.FlowLayout;
import java.awt.CardLayout;
import java.awt.Color;

public class WindowCardLayout{

    JFrame frame;
    CardLayout cardLayout;
    JPanel panelSuperior, panelInferior,panelInf1, panelInf2, panelInf3;
    JLabel etiqueta, etiqueta1, etiqueta2,etiqueta3;
    JComboBox combo;
    String [] vectorCadena = {"panel1","panel2","panel3"};

    public WindowCardLayout(){/*Constructor*/
        construyePanelSuperior();
        construyePanelInf1();
        construyePanelInf2();
        construyePanelInf3();
        construyePanelInferior();
        construyeVentana();}

    public void construyePanelSuperior(){
        etiqueta = new JLabel("Elegir Opcion");
        panelSuperior=new JPanel();
        panelSuperior.setBorder(BorderFactory.createTitledBorder("Demo por INFORUX"));
        combo = new JComboBox(vectorCadena);
        panelSuperior.setLayout(new FlowLayout());
        panelSuperior.add(etiqueta);
        panelSuperior.add(combo);
        panelSuperior.getPreferredSize();}

    public void construyePanelInferior(){
        panelInferior= new JPanel();
        panelInferior.setBorder(BorderFactory.createTitledBorder("Panel Inferior"));
        cardLayout=new CardLayout();
        panelInferior.setLayout(cardLayout);
        /*Al agregar necesitamos 2 argumentos, el objeto a agregar y un nombre referencial */
        panelInferior.add(panelInf1, "panel1");
        panelInferior.add(panelInf2, "panel2");
        panelInferior.add(panelInf3, "panel3");}

    public void construyePanelInf1(){
        etiqueta1 = new JLabel("Has Seleccionado el Panel 1");
        panelInf1 = new JPanel(new FlowLayout());
        panelInf1.setBackground(Color.white);
        panelInf1.add(etiqueta1);}

    public void construyePanelInf2(){
        etiqueta2 = new JLabel("increiblemente estas viendo el panel2");
        panelInf2 = new JPanel(new FlowLayout());
        panelInf2.setBackground(Color.orange);
        panelInf2.add(etiqueta2);}

    public void construyePanelInf3(){
        etiqueta3 = new JLabel("CardLayout permite solo uno a la vez, esta vez el panel 3");
        panelInf3 = new JPanel(new FlowLayout());
        panelInf3.setBackground(Color.green);
        panelInf3.add(etiqueta3);}

    public void construyeVentana(){
        frame= new JFrame();
        frame.setLayout(new BoxLayout(frame.getContentPane(),BoxLayout.Y_AXIS));
        frame.add(panelSuperior);
        frame.add(panelInferior);
        frame.getPreferredSize();
        frame.pack();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);
        //creamos el objeto controlador de eventos
        ControlCardLayout control= new ControlCardLayout(this);
        combo.addActionListener(control);}

    public static void main (String [] inforux){
        new WindowCardLayout();
    }

}


Aqui el fuente ControlCardLAyout

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ControlCardLayout implements ActionListener{

WindowCardLayout ventana;
public ControlCardLayout( WindowCardLayout frame){
       ventana = frame ;}
public void actionPerformed (ActionEvent evento){
  if (evento.getSource()==ventana.combo){
     if (ventana.combo.getSelectedIndex()==0){
               ventana.cardLayout.show(ventana.panelInferior, "panel1");}
     if (ventana.combo.getSelectedIndex()==1){
               ventana.cardLayout.show(ventana.panelInferior, "panel2");}
     if (ventana.combo.getSelectedIndex()==2){
               ventana.cardLayout.show(ventana.panelInferior, "panel3");}}
   }
}

Listo una compilada y ejecutamos

$ javac WindowCardLayout.java
$ java WindoCardLayout

El resultado sera asi:
pantallazo1
pantallazo-1





Aprendiendo con JFileChooser … Parte 1

6 08 2008

JFileChooser es un componente JAVA, que nos permite selecionar y/o grabar cualquier archivo basicamente dentro de nuestro ordenador, en este oportunidad fijaremos la antencion en la funcion de “Seleccion o Abrir”

Leer el resto de esta entrada »





Aprendiendo con JComboBox… Parte 2

2 08 2008

JComboBox, es un componente swing, y como tal, podemos crear nuestro propio modelo de datos al momento de crear y manipular a este componente(en este caso: jComboBox). Puedes leer MVC en Java para darte la idea general.

En este caso, el ejercicio intenta mostrar la forma sencilla al momento de implementar nuestro propio Modelo de datos para un componente JComboBox.

Leer el resto de esta entrada »





Modelo – Vista – Controlador (MVC) para tus Aplicaciones JAVA

2 08 2008

Desde hace mucho tiempo, es que utilizo MVC para mis aplicaciones JAVA. y en esta ocacion tratare de mostrarle con plabras sencillas, “La idea general del MVC”.

Leer el resto de esta entrada »





Aprediendo con JCheckBox y JRadioButton

21 07 2008

Existen componentes en java, que nos permiten SELECCIONAR SOLOMENTE UNA OPCION ENTRE VARIAS, a estos componentes en java, le denominamos JRadioButton, otros componentes que nos permiten SELECCIONAR VARIAS OPCIONES ENTRE MUCHAS, en java les llamamos JCheckBox.

En esta oportunidad, para aprender a usar estos 2 componentes, tenemos un ejemplo:

“El ejemplo trata sobre la compra de un ordenador (Portatil o de Escritorio), luego, tendremos la opcion de agregarle algunos accesioros mas(memoria usb, y ariculares)”

La imagen mostrada es la ventana de interfaz de usuario.

Leer el resto de esta entrada »