Uso de la clase JTabbedPane

En esta ocasion mostrare como se utiliza la clase JTabbedPane para insertar varias fichas dentro de un JFrame, 3 en este caso. El codigo es el siguiente:

/*
 * Descripcion:  Clase que muestra el uso de la clase JTabbedPane para insertar fichas
 *               dentro de un JFrame.
 * Archivo:      PruebaJTabbedPane.java
 * Fecha:        29/12/2009
 *
 * @author gonzasilve@gmail.com
 */

/*       metodo JTabbedPane.add()
            Primer  argumento:  Titulo de la ficha.
            Segundo argumento:  Icon, icono de la ficha de la ficha.
            Tercer  argumento:  Un objeto Component que representa la GUI a mostrar cuanda se da clic en la ficha.
            Cuarto  argumento:  Una cadena de texto que especifica el ToolTp de la ficha (texto que se muestra al colocar mouse sobre la ficha). */

import javax.swing.*;       // Para poder usar JTabbedPane 
import java.awt.*;          // Para poder usar FlowLayout y  componentes varios

public class PruebaJTabbedPane extends JFrame
{
    JTabbedPane panelFichas = new JTabbedPane();
    Box contAntesDeFicha;
    Box boxContenidoFrame;

    PruebaJTabbedPane(String titulo, int ancho, int alto)
    {
        super(titulo);
        setSize(ancho, alto);

        JPanel panFicha1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panFicha1.add(new JLabel("Contenido de la ficha1"));
        ImageIcon iconoFicha1 = new ImageIcon(getClass().getResource("iconoFicha1.gif"));
        panelFichas.addTab("Trabajo", iconoFicha1,panFicha1,"ficha1");

        JPanel panFicha2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
        panFicha2.add(new JLabel("Contenido de la ficha2"));
        ImageIcon iconoFicha2 = new ImageIcon(getClass().getResource("iconoFicha2.gif"));
        panelFichas.addTab("Datos personales", iconoFicha2,panFicha2,"tooltip ficha2");

        JPanel panFicha3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JPanel panCampoNombre = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblNombre = new JLabel("Nombre");
            JTextField jtfNombre = new JTextField(10);
        panCampoNombre.add(lblNombre);
        panCampoNombre.add(jtfNombre);
        panFicha3.add(panCampoNombre);
        ImageIcon iconoFicha3 = new ImageIcon(getClass().getResource("iconoFicha3.gif"));
        panelFichas.addTab("Otros", iconoFicha3,panFicha3,"tooltip ficha3");

        // Contenido que se insertara antes de agregar las fichas al JFrame
        contAntesDeFicha = Box.createVerticalBox();
        JTextField jtfCajaBusqueda = new JTextField(30);
        JButton btnBuscar = new JButton("Buscar");
        JPanel panBusqueda = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panBusqueda.add(jtfCajaBusqueda);
        panBusqueda.add(btnBuscar);

        // Separamos la caja de busqueda de el borde superior de la ventana
        contAntesDeFicha.add(Box.createVerticalStrut(20));
        contAntesDeFicha.add(panBusqueda);

        JPanel panAntes = new JPanel(new BorderLayout());
        panAntes.add(contAntesDeFicha);
        JPanel panFichas = new JPanel(new BorderLayout());
        panFichas.add(panelFichas);

        boxContenidoFrame = Box.createVerticalBox();
        boxContenidoFrame.add(panAntes);
        boxContenidoFrame.add(panFichas);
        add(boxContenidoFrame);

        this.setLocationRelativeTo(this);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void mostrar()
    {
        setVisible(true);
    }

    public static void main(String args[])
    {
        PruebaJTabbedPane prueba1 = new PruebaJTabbedPane("Prueba de JTabbedPane",800,500);
        prueba1.mostrar();
    }
}

y aca una imagen de la ventana que genera este codigo:

Espero le sirva a alguien, hasta pronto
}

Diseño de Ventana empleados usando la clase Box

En esta ocasion dejo una ejemplo de como disear una ventana usando la Clase Box. Los iconos que utilice estan en mi pagina web, en este link. El diseño de la ventana es sobre una tabla llamada empleados, que obviamente guarda informacion sobre empleados de una empresa ficticia.

La ventana esta diseñada para mostrar los campos de esta tabla, creada en Mysql:

Como se puede observar a continuacion es bastante codigo, pero bueno pienso que vale la pena con tal de aprender como se diseña una ventana de estas desde 0 (sin ayuda de ningun IDE).

/**
 * @(#)JfrEmpleados.java
 * Descripcion: Interfaz grafica de Empleados, este JFrame permite al usuario
 * llevar el control de empleados.
 *
 * @author gonzasilve@gmail.com
 * @version 1.00 2009/11/17
 */

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.util.*;

//Importar clases para manejo de BD (en este ejemplo no
//                                   se usa ninguna clase de este paquete)
import java.sql.*;

public class JfrEmpleados extends JFrame
{
		/*
	 *Prefijos:
	 *	jtx		JTextField
	 *	jpf		JPasswordField
	 *	jcb		jComboBox
	 *	btn		JButton
	 *	lbl		JLabel
	 *	pan		JPanel
	 *	fra		JFrame
	 *	box		Box
	 *  jrb		JRadioButton
	 *
	 **/

	//Constructor que crea la interfaz grafic de la ventan principal
    public JfrEmpleados()
    {
    	setTitle("Hardware Solutions S.A. de C.V. -Empleados");
    	setSize(900,620);
    	this.setLocationRelativeTo(this);	//Centramos este JFrame en la pantalla
        this.setResizable(false);
        this.setIconImage(new ImageIcon(getClass().getResource("iconoEmpleados.png")).getImage());
        //setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //Box que contendra todo el contenido del JFrame
        Box boxContenidoVertical = Box.createVerticalBox();

        //Disenio del rotulo principal superior del JFrame
        Box boxHRotuloPrincipal = Box.createHorizontalBox();
        JLabel lblRotuloSistema = new JLabel("Hardware Solutions S.A. de C.V.");
        lblRotuloSistema.setFont(new Font("Arial",Font.BOLD,20));
        lblRotuloSistema.setForeground(Color.BLUE);
        JLabel lblIconoEmpleados = new JLabel(new ImageIcon(this.getClass().getResource("icono_empleados.png")));
        JLabel lblRotuloEmpleados = new JLabel("Empleados");
        lblRotuloEmpleados.setFont(new Font("Arial",Font.BOLD,20));
        lblRotuloEmpleados.setForeground(Color.GREEN);
        JButton btnCerrarEmpleados = new JButton();
        btnCerrarEmpleados.setMargin(new Insets(0, 0, 0, 0));
        btnCerrarEmpleados.setIcon(new ImageIcon(this.getClass().getResource("icono_cerrar.png")));
        boxHRotuloPrincipal.add(Box.createHorizontalStrut(15));
        boxHRotuloPrincipal.add(lblRotuloSistema);
        boxHRotuloPrincipal.add(Box.createHorizontalStrut(80));
        boxHRotuloPrincipal.add(lblIconoEmpleados);
        boxHRotuloPrincipal.add(Box.createHorizontalStrut(8));
        boxHRotuloPrincipal.add(lblRotuloEmpleados);
        boxHRotuloPrincipal.add(Box.createHorizontalStrut(262));
        boxHRotuloPrincipal.add(btnCerrarEmpleados);
        JPanel panRotuloPrincipal = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panRotuloPrincipal.setBackground(Color.white);
        panRotuloPrincipal.add(boxHRotuloPrincipal);

        //Creacion de los botones Principales de la parte superior del JFrame
        JButton btnNuevo = new JButton();
        btnNuevo.setIcon(new ImageIcon(getClass().getResource("icono_nuevo.png")));
        btnNuevo.setMargin(new Insets(0, 3, 0, 0));
        btnNuevo.setToolTipText("Nuevo empleado");
        JButton btnModificar = new JButton();
        btnModificar.setIcon(new ImageIcon(getClass().getResource("icono_modificar.png")));
        btnModificar.setMargin(new Insets(0, 3, 0, 0));
        btnModificar.setToolTipText("Modificar datos del empleado actual");
        JButton btnEliminar = new JButton();
        btnEliminar.setIcon(new ImageIcon(getClass().getResource("icono_eliminar.png")));
        btnEliminar.setMargin(new Insets(0, 2, 0, 0));
        btnEliminar.setToolTipText("Dar de baja al empleado actual");
        JButton btnListar = new JButton();
        btnListar.setIcon(new ImageIcon(getClass().getResource("icono_listar.png")));
        btnListar.setMargin(new Insets(0, 3, 0, 2));
        btnListar.setToolTipText("Listar en una tabla a todos los empleados");
        JButton btnFinBusqueda = new JButton("Terminar busqueda");
        btnFinBusqueda.setIcon(new ImageIcon(getClass().getResource("icono_Finbuscar.gif")));
        btnFinBusqueda.setMargin(new Insets(0, 3, 0, 3));
        btnFinBusqueda.setToolTipText("Mostrar todos los empleados");

        Box boxHBotonesPrincipales = Box.createHorizontalBox();
        JPanel panBotonesPrincipales = new JPanel(new FlowLayout(FlowLayout.LEFT));
        boxHBotonesPrincipales.add(Box.createHorizontalStrut(40));
        boxHBotonesPrincipales.add(btnNuevo);
        boxHBotonesPrincipales.add(Box.createHorizontalStrut(25));
        boxHBotonesPrincipales.add(btnModificar);
        boxHBotonesPrincipales.add(Box.createHorizontalStrut(25));
        boxHBotonesPrincipales.add(btnEliminar);
        boxHBotonesPrincipales.add(Box.createHorizontalStrut(30));
        boxHBotonesPrincipales.add(btnListar);
        boxHBotonesPrincipales.add(Box.createHorizontalStrut(150));
        boxHBotonesPrincipales.add(btnFinBusqueda);
        panBotonesPrincipales.add(boxHBotonesPrincipales);

        //Creacion de la caja de busqueda y el rotulo del nombre del empleado
        //Creacion de caja de busqueda
        JTextField jtfCajaBusqueda = new JTextField(15);
        JButton btnBuscar = new JButton("Buscar", new ImageIcon(getClass().getResource("icono_buscar16.gif")));
        JButton btnOpcionesBusqueda = new JButton();
        btnOpcionesBusqueda.setMargin(new Insets(0, 0, 0, 0));
        btnOpcionesBusqueda.setIcon(new ImageIcon(getClass().getResource("icono_configurar16.png")));
        btnOpcionesBusqueda.setToolTipText("Opciones de busqueda");
        Box boxHBusqueda = Box.createHorizontalBox();
        boxHBusqueda.add(Box.createHorizontalStrut(10));
        boxHBusqueda.add(jtfCajaBusqueda);
        boxHBusqueda.add(Box.createHorizontalStrut(5));
        boxHBusqueda.add(btnBuscar);
        boxHBusqueda.add(Box.createHorizontalStrut(5));
        boxHBusqueda.add(btnOpcionesBusqueda);
        JPanel panBusqueda = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panBusqueda.add(boxHBusqueda);

        //Creacion de la etiqueta de nombre de empleado
        JLabel lblNombreEmpleado = new JLabel("> Xavier Franco Silva");
        lblNombreEmpleado.setFont(new Font("Arial",Font.BOLD,20));
        lblNombreEmpleado.setForeground(Color.BLUE);
        Box boxHNombreEmpleado = Box.createHorizontalBox();
        boxHNombreEmpleado.add(Box.createHorizontalStrut(10));
        boxHNombreEmpleado.add(lblNombreEmpleado);
        boxHNombreEmpleado.add(Box.createHorizontalStrut(285));         //tamanio del fondo del nombre del empleado
        JPanel panNombreEmpleado = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panNombreEmpleado.setBackground(new Color(174,156,244));
        panNombreEmpleado.add(boxHNombreEmpleado);

        Box boxHBusquedaYNombre = Box.createHorizontalBox();
        boxHBusquedaYNombre.add(panBusqueda);
        boxHBusquedaYNombre.add(Box.createHorizontalStrut(20));
        boxHBusquedaYNombre.add(panNombreEmpleado);
        JPanel panBusquedaYNombre = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panBusquedaYNombre.add(boxHBusquedaYNombre);

        //Creacion de la lista de nombre sy la ficha de datos del empleado
        //Creacion de la lista de nombres
        Box boxVListaNombres = Box.createVerticalBox();
        Box boxHEspaciosSuperiorNombres = Box.createHorizontalBox();
        boxHEspaciosSuperiorNombres.add(Box.createHorizontalStrut(170));    //Espacio arriba de la lista de nombres
        boxVListaNombres.add(boxHEspaciosSuperiorNombres);
        JList lstListaNombres = new JList();
        DefaultListModel modeloNombres = new DefaultListModel();
        modeloNombres.addElement("Juan carlos");
        modeloNombres.addElement("Samuel Arturo");
        modeloNombres.addElement("Armando");
        modeloNombres.addElement("Juan carlos");
        modeloNombres.addElement("Samuel Arturo");
        modeloNombres.addElement("Armando");
        lstListaNombres.setVisibleRowCount(16);          //Numero de elementos que se muestran al usuario
        lstListaNombres.setModel(modeloNombres);
        JScrollPane scrollListaNombres = new JScrollPane(lstListaNombres);
        boxVListaNombres.add(scrollListaNombres);
        JPanel panboxVListaNombres = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panboxVListaNombres.add(boxVListaNombres);

        //Creacion del contenido de las fichas
        Box boxVFichas = Box.createVerticalBox();
        Box boxHEspaciosSuperiorFichas = Box.createHorizontalBox();
        boxHEspaciosSuperiorFichas.add(Box.createHorizontalStrut(100));    //Espacio arriba de las fichas
        boxVFichas.add(boxHEspaciosSuperiorFichas);
        Color colorEtiquetas = Color.BLUE;
        Color colorInhabilitados = Color.BLACK;
        //Disenio del contenido de la               FICHA DE DATOS LABORALES
        //Columan 1
        JTabbedPane jtpDatosEmpleado = new JTabbedPane();
        JPanel panFicha1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JPanel panID= new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblIDEmpleado = new JLabel("ID                    ");
            lblIDEmpleado.setForeground(colorEtiquetas);
            JTextField jtfIDEmpleado = new JTextField(20);
            jtfIDEmpleado.setDisabledTextColor(colorInhabilitados);
        panID.add(lblIDEmpleado);
        panID.add(jtfIDEmpleado);
        JPanel panCargo= new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblCargo = new JLabel("Cargo              ");
            lblCargo.setForeground(colorEtiquetas);
            JTextField jtfCargo = new JTextField(20);
            jtfCargo.setDisabledTextColor(colorInhabilitados);
        panCargo.add(lblCargo);
        panCargo.add(jtfCargo);
        JPanel panDepartamento= new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblDepartamento = new JLabel("Departamento ");
            lblDepartamento.setForeground(colorEtiquetas);
            JTextField jtfDepartamento = new JTextField(20);
            jtfDepartamento.setDisabledTextColor(colorInhabilitados);
        panDepartamento.add(lblDepartamento);
        panDepartamento.add(jtfDepartamento);
        JPanel panJefeDirecto = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblJefeDirecto = new JLabel("Jefe directo      ");
            lblJefeDirecto.setForeground(colorEtiquetas);
            JTextField jtfJefeDirecto = new JTextField(20);
            jtfJefeDirecto.setDisabledTextColor(colorInhabilitados);
        panJefeDirecto.add(lblJefeDirecto);
        panJefeDirecto.add(jtfJefeDirecto);
        JPanel panFechaContratacion = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblFechaContratacion = new JLabel("<html>Fecha de <br>contratacion&nbsp&nbsp&nbsp&nbsp&nbsp</html>");
            lblFechaContratacion.setForeground(colorEtiquetas);
            JTextField jtfFechaContratacion = new JTextField(20);
            jtfFechaContratacion.setDisabledTextColor(colorInhabilitados);
        panFechaContratacion.add(lblFechaContratacion);
        panFechaContratacion.add(jtfFechaContratacion);
        JPanel panTratamiento = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblTratamiento = new JLabel("Tratamiento     ");
            lblTratamiento.setForeground(colorEtiquetas);
            JTextField jtfTratamiento = new JTextField(20);
            jtfTratamiento.setDisabledTextColor(colorInhabilitados);
        panTratamiento.add(lblTratamiento);
        panTratamiento.add(jtfTratamiento);
        //Columna 2
        JPanel panInfoSalario1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblInfoSalario1 = new JLabel("Salario en base a:                                   ");
            lblInfoSalario1.setForeground(colorEtiquetas);
            JComboBox jcbTiposSalario = new JComboBox();
            jcbTiposSalario.addItem("Salario base");
            jcbTiposSalario.addItem("Salario por comision");
            jcbTiposSalario.addItem("Salario base + comision");
            jcbTiposSalario.addItem("Salario por horas trabajadas");
            jcbTiposSalario.setMaximumRowCount(4);
        JPanel panCamposInfoSalario1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panCamposInfoSalario1.add(lblInfoSalario1);
        Box boxVInfoSalario = Box.createVerticalBox();
        boxVInfoSalario.add(panCamposInfoSalario1);
        boxVInfoSalario.add(jcbTiposSalario);
        panInfoSalario1.add(boxVInfoSalario);
        JPanel panInfoSalario2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblInfoSalario2 = new JLabel("Sueldo base (S)           ");
            lblInfoSalario2.setForeground(colorEtiquetas);
            JTextField jtfInfoSalario1 = new JTextField(10);
            jtfInfoSalario1.setDisabledTextColor(colorInhabilitados);
        panInfoSalario2.add(lblInfoSalario2);
        panInfoSalario2.add(jtfInfoSalario1);
        JPanel panInfoSalario3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblInfoSalario3 = new JLabel("Tasa de comision (%)  ");
            lblInfoSalario3.setForeground(colorEtiquetas);
            JTextField jtfInfoSalario2 = new JTextField(10);
            jtfInfoSalario2.setDisabledTextColor(colorInhabilitados);
        panInfoSalario3.add(lblInfoSalario3);
        panInfoSalario3.add(jtfInfoSalario2);

        Box boxHFichaLaborales = Box.createHorizontalBox();
        Box boxVColumna1Ficha1 = Box.createVerticalBox();
        Box boxVColumna2Ficha1 = Box.createVerticalBox();

        boxVColumna1Ficha1.add(Box.createVerticalStrut(10));
        boxVColumna1Ficha1.add(panID);
        boxVColumna1Ficha1.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha1.add(panCargo);
        boxVColumna1Ficha1.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha1.add(panDepartamento);
        boxVColumna1Ficha1.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha1.add(panJefeDirecto);
        boxVColumna1Ficha1.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha1.add(panFechaContratacion);
        boxVColumna1Ficha1.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha1.add(panTratamiento);

        boxVColumna2Ficha1.add(panInfoSalario1);
        boxVColumna2Ficha1.add(Box.createVerticalStrut(12));
        boxVColumna2Ficha1.add(panInfoSalario2);
        boxVColumna2Ficha1.add(Box.createVerticalStrut(8));
        boxVColumna2Ficha1.add(panInfoSalario3);
        JPanel panboxVColumna2Ficha1 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panboxVColumna2Ficha1.add(boxVColumna2Ficha1);

        boxHFichaLaborales.add(Box.createHorizontalStrut(10));
        boxHFichaLaborales.add(boxVColumna1Ficha1);
        boxHFichaLaborales.add(Box.createHorizontalStrut(15));
        boxHFichaLaborales.add(panboxVColumna2Ficha1);
        panFicha1.add(boxHFichaLaborales);
        ImageIcon iconoFichaDatosLaborales = new ImageIcon(getClass().getResource("iconoFichaLaborales.gif"));
        jtpDatosEmpleado.addTab("Datos laborales",iconoFichaDatosLaborales, panFicha1,"Datos del trabajo");

        //Disenio del contenido de la               FICHA DE DATOS PERSONALES
        JPanel panFicha2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JPanel panNombre= new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblNombre = new JLabel("Nombre    ");
            lblNombre.setForeground(colorEtiquetas);
            JTextField jtfNombre = new JTextField(20);
            jtfNombre.setDisabledTextColor(colorInhabilitados);
        panNombre.add(lblNombre);
        panNombre.add(jtfNombre);
        JPanel panApellidos = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblApellidos = new JLabel("Apellidos ");
            lblApellidos.setForeground(colorEtiquetas);
            JTextField jtfApellidos = new JTextField(20);
            jtfApellidos.setDisabledTextColor(colorInhabilitados);
        panApellidos.add(lblApellidos);
        panApellidos.add(jtfApellidos);
        JPanel panSexo = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblSexo = new JLabel("Sexo         ");
            lblSexo.setForeground(colorEtiquetas);
            JComboBox jcbSexo = new JComboBox();
            jcbSexo.addItem("Masculino     ");
            jcbSexo.addItem("Femenino");
            jcbSexo.setMaximumRowCount(2);
        panSexo.add(lblSexo);
        panSexo.add(jcbSexo);
        JPanel panTelefono = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblTelefono = new JLabel("Telefono  ");
            lblTelefono.setForeground(colorEtiquetas);
            JTextField jtfTelefono = new JTextField(20);
            jtfTelefono.setDisabledTextColor(colorInhabilitados);
        panTelefono.add(lblTelefono);
        panTelefono.add(jtfTelefono);
        JPanel panEdad = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblEdad = new JLabel("Edad        ");
            lblEdad.setForeground(colorEtiquetas);
            JTextField jtfEdad = new JTextField(20);
            jtfTelefono.setDisabledTextColor(colorInhabilitados);
        panEdad.add(lblEdad);
        panEdad.add(jtfEdad);
        JPanel panCorreo = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblCorreo = new JLabel("Correo     ");
            lblCorreo.setForeground(colorEtiquetas);
            JTextField jtfCorreo = new JTextField(20);
            jtfCorreo.setDisabledTextColor(colorInhabilitados);
        panCorreo.add(lblCorreo);
        panCorreo.add(jtfCorreo);

        //Contenido de columna2 ficha 2
        JPanel panInfoFotografia = new JPanel(new FlowLayout(FlowLayout.CENTER));
            JLabel lblInfoFotografia = new JLabel("Fotografia");
        panInfoFotografia.add(lblInfoFotografia);
        JPanel panFotografia = new JPanel(new FlowLayout(FlowLayout.CENTER));
            JLabel lblFotografia = new JLabel();
            ImageIcon iconofotografia = new ImageIcon(getClass().getResource("sin_fotografia.gif"));
            lblFotografia.setIcon(iconofotografia);
        panFotografia.add(lblFotografia);
        JPanel panbtnCambiarFotografia = new JPanel(new FlowLayout(FlowLayout.LEFT));
            ImageIcon iconoModificarFotografia = new ImageIcon(getClass().getResource("iconoCambiar_fotografia.png"));
            JButton btnModificarFotografia = new JButton(iconoModificarFotografia);
            btnModificarFotografia.setMargin(new Insets(0, 0, 0, 0));
            btnModificarFotografia.setToolTipText("Cambiar fotografia");
        panbtnCambiarFotografia.add(btnModificarFotografia);
        JPanel panbtnQuitarFotografia = new JPanel(new FlowLayout(FlowLayout.LEFT));
            ImageIcon iconoQuitarFotografia = new ImageIcon(getClass().getResource("iconoQuitar_fotografia.png"));
            JButton btnQuitarFotografia = new JButton(iconoQuitarFotografia);
            btnQuitarFotografia.setMargin(new Insets(0, 0, 0, 0));
            btnQuitarFotografia.setToolTipText("Quitar fotografia");
        panbtnQuitarFotografia.add(btnQuitarFotografia);
        JPanel panbtnRevertirFotografia = new JPanel(new FlowLayout(FlowLayout.LEFT));
            ImageIcon iconoRevertirFotografia = new ImageIcon(getClass().getResource("iconoRevertir_fotografia.png"));
            JButton btnRevertirFotografia = new JButton(iconoRevertirFotografia);
            btnRevertirFotografia.setMargin(new Insets(0, 0, 0, 0));
            btnRevertirFotografia.setToolTipText("Revertir dejando la que estaba");
        panbtnRevertirFotografia.add(btnRevertirFotografia);

        Box boxHFichaPersonales = Box.createHorizontalBox();
        Box boxVColumna1Ficha2 = Box.createVerticalBox();
        Box boxHColumna2Ficha2 = Box.createHorizontalBox();
        Box boxVCol1Columna2Ficha2 = Box.createVerticalBox();
        Box boxVCol2Columna2Ficha2 = Box.createVerticalBox();

        boxVColumna1Ficha2.add(Box.createVerticalStrut(10));
        boxVColumna1Ficha2.add(panNombre);
        boxVColumna1Ficha2.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha2.add(panApellidos);
        boxVColumna1Ficha2.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha2.add(panSexo);
        boxVColumna1Ficha2.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha2.add(panTelefono);
        boxVColumna1Ficha2.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha2.add(panEdad);
        boxVColumna1Ficha2.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha2.add(panCorreo);

        boxVCol1Columna2Ficha2.add(panInfoFotografia);
        boxVCol1Columna2Ficha2.add(panFotografia);

        boxVCol2Columna2Ficha2.add(Box.createVerticalStrut(40));
        boxVCol2Columna2Ficha2.add(panbtnCambiarFotografia);
        boxVCol2Columna2Ficha2.add(panbtnQuitarFotografia);
        boxVCol2Columna2Ficha2.add(panbtnRevertirFotografia);
        JPanel panboxVCol2Columna2Ficha2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panboxVCol2Columna2Ficha2.add(boxVCol2Columna2Ficha2);

        boxHColumna2Ficha2.add(boxVCol1Columna2Ficha2);
        boxHColumna2Ficha2.add(panboxVCol2Columna2Ficha2);

        JPanel panboxVColumna2Ficha2 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panboxVColumna2Ficha2.add(boxHColumna2Ficha2);

        boxHFichaPersonales.add(Box.createHorizontalStrut(10));
        boxHFichaPersonales.add(boxVColumna1Ficha2);
        boxHFichaPersonales.add(Box.createHorizontalStrut(50));
        boxHFichaPersonales.add(panboxVColumna2Ficha2);

        panFicha2.add(boxHFichaPersonales);
        ImageIcon iconoFicha2 = new ImageIcon(getClass().getResource("iconoFichaPersonales.gif"));
        jtpDatosEmpleado.addTab("Datos personales", iconoFicha2, panFicha2,"Datos personales");

		//Disenio del contenido de la               FICHA  DIRECCION
        JPanel panFicha3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JPanel panNacionalidad = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblNacionalidad = new JLabel("Nacionalidad  ");
            lblNacionalidad.setForeground(colorEtiquetas);
            JTextField jtfNacionalidad = new JTextField(20);
            jtfNacionalidad.setDisabledTextColor(colorInhabilitados);
        panNacionalidad.add(lblNacionalidad);
        panNacionalidad.add(jtfNacionalidad);
        JPanel panEstado = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblEstado = new JLabel("Estado           ");
            lblEstado.setForeground(colorEtiquetas);
            JTextField jtfEstado = new JTextField(20);
            jtfEstado.setDisabledTextColor(colorInhabilitados);
        panEstado.add(lblEstado);
        panEstado.add(jtfEstado);
        JPanel panDireccion = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblDireccion = new JLabel("Direccion       ");
            lblDireccion.setForeground(colorEtiquetas);
            JTextField jtfDireccion = new JTextField(20);
            jtfDireccion.setDisabledTextColor(colorInhabilitados);
        panDireccion.add(lblDireccion);
        panDireccion.add(jtfDireccion);
        JPanel panCP = new JPanel(new FlowLayout(FlowLayout.LEFT));
            JLabel lblCP = new JLabel("C.P.                ");
            lblCP.setForeground(colorEtiquetas);
            JTextField jtfCP = new JTextField(20);
            jtfCP.setDisabledTextColor(colorInhabilitados);
        panCP.add(lblCP);
        panCP.add(jtfCP);
        JPanel panlblObservaciones = new JPanel(new FlowLayout(FlowLayout.CENTER));
            JLabel lblObservaciones = new JLabel("Observaciones");
            lblObservaciones.setForeground(colorEtiquetas);
        panlblObservaciones.add(lblObservaciones);
        JPanel panjtaObservaciones = new JPanel(new FlowLayout(FlowLayout.CENTER));
            JTextArea jtaObservaciones = new JTextArea(5,20);
            jtaObservaciones.setDisabledTextColor(colorInhabilitados);
            JScrollPane scrollObservaciones = new JScrollPane(jtaObservaciones);
            scrollObservaciones.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);         //Barra de desplamiento vertical siempre visible
            scrollObservaciones.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);      //Barra de desplamiento horizontal nunca visible
        panjtaObservaciones.add(scrollObservaciones);

        Box boxHFichaDireccion = Box.createHorizontalBox();
        Box boxVColumna1Ficha3 = Box.createVerticalBox();
        Box boxHColumna2Ficha3 = Box.createVerticalBox();

        boxVColumna1Ficha3.add(Box.createVerticalStrut(10));
        boxVColumna1Ficha3.add(panNacionalidad);
        boxVColumna1Ficha3.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha3.add(panEstado);
        boxVColumna1Ficha3.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha3.add(panDireccion);
        boxVColumna1Ficha3.add(Box.createVerticalStrut(5));
        boxVColumna1Ficha3.add(panCP);

        boxHColumna2Ficha3.add(Box.createVerticalStrut(8));
        boxHColumna2Ficha3.add(panlblObservaciones);
        boxHColumna2Ficha3.add(panjtaObservaciones);
        JPanel panboxVColumna2Ficha3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panboxVColumna2Ficha3.add(boxHColumna2Ficha3);

        boxHFichaDireccion.add(Box.createHorizontalStrut(10));
        boxHFichaDireccion.add(boxVColumna1Ficha3);
        boxHFichaDireccion.add(Box.createHorizontalStrut(20));
        boxHFichaDireccion.add(panboxVColumna2Ficha3);

        panFicha3.add(boxHFichaDireccion);
        ImageIcon iconoFicha3 = new ImageIcon(getClass().getResource("iconoFichaDireccion.gif"));
        jtpDatosEmpleado.addTab("Direccion", iconoFicha3, panFicha3,"Direccion del empleado");

        JPanel panFichas = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JPanel panFichass = new JPanel(new BorderLayout());
        panFichass.add(jtpDatosEmpleado,BorderLayout.CENTER);
        boxVFichas.add(panFichass);
        panFichas.add(boxVFichas);

        Box boxHNombresYFichas = Box.createHorizontalBox();
        boxHNombresYFichas.add(Box.createHorizontalStrut(15));
        boxHNombresYFichas.add(panboxVListaNombres);
        boxHNombresYFichas.add(boxVFichas);

        Box boxHNavegacion = Box.createHorizontalBox();
        JButton btnPrimero = new JButton();
        ImageIcon iconoPrimero = new ImageIcon(getClass().getResource("icono_primero.gif"));
        btnPrimero.setIcon(iconoPrimero);
        btnPrimero.setMargin(new Insets(0, 15, 0, 15));
        JButton btnAnterior = new JButton();
        ImageIcon iconoAnterior = new ImageIcon(getClass().getResource("icono_atras.png"));
        btnAnterior.setIcon(iconoAnterior);
        btnAnterior.setMargin(new Insets(0, 20, 0,20));
        JButton btnSiguiente = new JButton();
        ImageIcon iconoSiguiente = new ImageIcon(getClass().getResource("icono_siguiente.png"));
        btnSiguiente.setIcon(iconoSiguiente);
        btnSiguiente.setMargin(new Insets(0, 20, 0, 20));
        JButton btnUltimo = new JButton();
        ImageIcon iconoUltimo = new ImageIcon(getClass().getResource("icono_ultimo.gif"));
        btnUltimo.setIcon(iconoUltimo);
        btnUltimo.setMargin(new Insets(0, 15, 0,15));
        JLabel lblContadorEmpleados = new JLabel("Empleado 3 de 10");
        lblContadorEmpleados.setFont(new Font("Arial",Font.BOLD,16));
        lblContadorEmpleados.setForeground(Color.BLUE);
        JButton btnGuardar = new JButton();
        ImageIcon iconoGuardar = new ImageIcon(getClass().getResource("icono_guardar.png"));
        btnGuardar.setIcon(iconoGuardar);
        btnGuardar.setMargin(new Insets(0, 6, 0,6));
        btnGuardar.setToolTipText("Guardar modificaciones");
        JButton btnCancelar = new JButton();
        ImageIcon iconoCancelar = new ImageIcon(getClass().getResource("Icono_cancelar.gif"));
        btnCancelar.setIcon(iconoCancelar);
        btnCancelar.setMargin(new Insets(5, 5, 5,5));
        btnCancelar.setToolTipText("Cancelar modificar");

        boxHNavegacion.add(Box.createHorizontalStrut(30));
        boxHNavegacion.add(btnPrimero);
        boxHNavegacion.add(Box.createHorizontalStrut(30));
        boxHNavegacion.add(btnAnterior);
        boxHNavegacion.add(Box.createHorizontalStrut(30));
        boxHNavegacion.add(btnSiguiente);
        boxHNavegacion.add(Box.createHorizontalStrut(30));
        boxHNavegacion.add(btnUltimo);
        boxHNavegacion.add(Box.createHorizontalStrut(30));
        boxHNavegacion.add(lblContadorEmpleados);
        boxHNavegacion.add(Box.createHorizontalStrut(40));
        boxHNavegacion.add(btnGuardar);
        boxHNavegacion.add(Box.createHorizontalStrut(30));
        boxHNavegacion.add(btnCancelar);
        JPanel panNavegacion = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panNavegacion.add(boxHNavegacion);

        //Agregamos el rotulo y luego los botones
        boxContenidoVertical.add(panRotuloPrincipal);
        boxContenidoVertical.add(Box.createVerticalStrut(5));
        boxContenidoVertical.add(panBotonesPrincipales);
        boxContenidoVertical.add(Box.createVerticalStrut(5));
        boxContenidoVertical.add(panBusquedaYNombre);
        boxContenidoVertical.add(Box.createVerticalStrut(5));
        boxContenidoVertical.add(boxHNombresYFichas);
        boxContenidoVertical.add(Box.createVerticalStrut(20));
        boxContenidoVertical.add(panNavegacion);

        //Todo el contenido del JFrame esta en un JPanel
        JPanel panContenidoVertical = new JPanel(new FlowLayout(FlowLayout.LEFT));
        panContenidoVertical.add(boxContenidoVertical);
        add(panContenidoVertical);

    	// ########### ESCUCHADOR BOTON REGRESAR   ##########
    	ActionListener escuchadorRegresar = new ActionListener()
    	{
        	public void actionPerformed(ActionEvent evt)
        	{
				JfrPrincipal.mostrar();
				setVisible(false);
        	}
   		};
    	btnCerrarEmpleados.addActionListener(escuchadorRegresar);

// ##################### ESCUCHADOR DE VENTANA ####################################################################################
    //Para que al dar clic en la x de la esquina de este JFrame se muestre por default la ventana principal
	this.addWindowListener(new WindowAdapter() {

			public void windowClosing(WindowEvent e)
			{
				JfrPrincipal.mostrar();
				setVisible(false);
			}

			public void windowClosed(WindowEvent e)
			{
				JfrPrincipal.mostrar();
				setVisible(false);
			}
		});

    }

    public void mostrar()
    {
    	this.setLocationRelativeTo(this);	//Centramos este JFrame en la pantalla
    	setVisible(true);
    }
}

y aca los pantallazos de la ejecucion del codigo de esta clase:

Ficha Datos Laborales

Ficha Datos personales

Ficha Direccion

hasta pronto.
}

Uso de la clase Box para diseñar Ventana con campos

Es muy comun tener que diseñar una ventana que contenga varios campos donde el usuario tiene que introducir informacion de diferente tipo, el aspecto de estos campos es similar a los de la imagen que sigue a continuacion:

Este ejemplo muestra como crear una ventana con varios campos ordenados mas o menos con la apariencia anterior. Para hacer esto nos auxiliamos de la clase Box que se encuentra en el paquete javax.swing. El codigo es el siguiente:


/*
 * Crea una ventana de formulario con varios campos  y dos botones abajo
 * Archivo: VentanaFormulario.java
 * Fecha: 9/12/2009
 */

import javax.swing.*;
import java.awt.FlowLayout;

/**
 *
 * @author gonzasilve@gmail.com
 */
public class VentanaFormulario extends JFrame
{
    JLabel jlbMatricula;    JTextField  jtfMatricula;
    JLabel jlbNombre;       JTextField  jtfNombre;
    JLabel jlbApellidos;    JTextField  jtfApellidos;
    JLabel jlbEdad;         JTextField  jtfEdad;
    JLabel jlbSexo;         JComboBox   jcbSexo;
    JButton btnGuardar;
    JButton btnCancelar;
    Box boxVCamposVentana;   //Contiene todo los campos de texto (con su respectiva etiqueta)
    JPanel panBotones;      //Contiene los botones Guardary Cancelar

    VentanaFormulario(String strTitulo, int intAncho, int intAlto)
    {
        super(strTitulo);
        setSize(intAncho, intAlto);
        this.setLocationRelativeTo(null);       //Centrar ventana en pantalla

        //Box vertical por que los botones van a estar abajo
        Box boxVContenidoVerticalVentana = Box.createVerticalBox();
        crearCamposVentana();
        crearBotones();
        //Espacio del borde superior de la ventana al primer Campo
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(30));
        boxVContenidoVerticalVentana.add(boxVCamposVentana);
        //Espacio entre el ultimo campo (sexo) y los botones Guardar y Cancelar
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(20));
        boxVContenidoVerticalVentana.add(panBotones);

        add(boxVContenidoVerticalVentana);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void crearCamposVentana()
    {
        Box boxHMatricula =  Box.createHorizontalBox();
        jlbMatricula = new JLabel("Matricula ");   jtfMatricula = new JTextField(15);
        boxHMatricula.add(Box.createHorizontalStrut(10));
        boxHMatricula.add(jlbMatricula);
        boxHMatricula.add(Box.createHorizontalStrut(14));
        boxHMatricula.add(jtfMatricula);
        JPanel panMatricula =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panMatricula.add(boxHMatricula);

        Box boxHNombre =  Box.createHorizontalBox();
        jlbNombre = new JLabel("Nombre ");   jtfNombre = new JTextField(15);
        boxHNombre.add(Box.createHorizontalStrut(10));
        boxHNombre.add(jlbNombre);
        boxHNombre.add(Box.createHorizontalStrut(20));
        boxHNombre.add(jtfNombre);
        JPanel panNombre =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panNombre.add(boxHNombre);

        Box boxHApellidos =  Box.createHorizontalBox();
        jlbApellidos = new JLabel("Apellidos ");   jtfApellidos = new JTextField(15);
        boxHApellidos.add(Box.createHorizontalStrut(10));
        boxHApellidos.add(jlbApellidos);
        boxHApellidos.add(Box.createHorizontalStrut(11));
        boxHApellidos.add(jtfApellidos);
        JPanel panApellidos =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panApellidos.add(boxHApellidos);

        Box boxHEdad =  Box.createHorizontalBox();
        jlbEdad = new JLabel("Edad ");   jtfEdad = new JTextField(15);
        boxHEdad.add(Box.createHorizontalStrut(10));
        boxHEdad.add(jlbEdad);
        boxHEdad.add(Box.createHorizontalStrut(40));
        boxHEdad.add(jtfEdad);
        JPanel panEdad =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panEdad.add(boxHEdad);

        Box boxHSexo =  Box.createHorizontalBox();
        jlbSexo = new JLabel("Sexo ");   jcbSexo = new JComboBox();
        jcbSexo.addItem("Masculino");
        jcbSexo.addItem("Femenino");
        boxHSexo.add(Box.createHorizontalStrut(10));
        boxHSexo.add(jlbSexo);
        boxHSexo.add(Box.createHorizontalStrut(40));
        boxHSexo.add(jcbSexo);
        JPanel panSexo =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panSexo.add(boxHSexo);

        boxVCamposVentana = Box.createVerticalBox();
        boxVCamposVentana.add(panMatricula);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panNombre);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panApellidos);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panEdad);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panSexo);
    }

    private void crearBotones()
    {
        Box boxHBotones = Box.createHorizontalBox();

        btnGuardar = new JButton("Guardar");
        btnCancelar = new JButton("Cancelar");
        boxHBotones.add(btnGuardar);
        boxHBotones.add(Box.createHorizontalStrut(20));
        boxHBotones.add(btnCancelar);
        boxHBotones.add(Box.createHorizontalStrut(40));

        panBotones =  new JPanel(new FlowLayout(FlowLayout.RIGHT) );
        panBotones.add(boxHBotones);
    }

    private void mostrar()
    {
        this.setVisible(true);
    }

    public static void main(String args[])
    {
        VentanaFormulario formulario1 = new VentanaFormulario("Ventana de formulario",400,400);
        formulario1.mostrar();
    }
}

La ejecucion de este codigo crea la siguiente ventana:

Bueno voi a explicar a grandes rasgos como funciona el codigo, las primeras dos lineas:


import javax.swing.*;
import java.awt.FlowLayout;

Permiten importar todas las clases del paquete swing, no es recomendable usar el asterisco por que importa todas las clases de ese paquete, pero por cuestiones de brevedad en el codigo lo he hecho. La clase FlowLayout esta en el paquete awt, por eso se importa a nuestra prueba aparte.

Como se puede ver en la linea:


public class VentanaFormulario extends JFrame

Nuestra clase extiende de la clase JFrame que se encuentra en el paquete swing. Despues de la declaracion de clase se declaran algunas variables :


    JLabel jlbMatricula;    JTextField  jtfMatricula;
    JLabel jlbNombre;       JTextField  jtfNombre;
    JLabel jlbApellidos;    JTextField  jtfApellidos;
    JLabel jlbEdad;         JTextField  jtfEdad;
    JLabel jlbSexo;         JComboBox   jcbSexo;
    JButton btnGuardar;
    JButton btnCancelar;
    Box boxVCamposVentana;   //Contiene todo los campos de texto (con su respectiva etiqueta)
    JPanel panBotones;      //Contiene los botones Guardary Cancelar

Como se puede por cada declaracion de JLabel hay un JTextField (Antes de cada caja de texto hay un texto descriptivo de que es lo que debe escribir ahi el usuario). En estas lineas tambien se declaran las variables para crear dos botones (Aceptar y Cancelar). La variable boxVCamposVentana va a contener todos los campos de texto JTextField, es decir, va a quedar como encerrados en un Box. Las clase Box es como una especie de contenedor (Container) que organiza los elementos que contiene en forma Vertical o forma Horizontal. Los componentes se ven algo asi, si el box es vertical:

y si el Box es horizontal se ve algo asi:

Los elementos cuando se van agregando a un box se alinean al centro. En el codigo anterio tambien se declaro un JPanel para contener a los botones Guardar y Cancelar. En esta prueba hacemos uso de varios Box para organizar todos los componentes adecuadamente en la ventana del JFrame. La forma en general como se van a organizar los componentescon contenedores Box, es la siguiente:

Box1 se agrega al JFrame con el metodo add, Box2 contendra los campos de texto y Box3 contendra los botones que estaran abajo en forma Horizontal, como se ve Box1 contiene a Box2 y Box3. Un Box puede contener cualquier numero de Box.
El siguiente codigo que sigue es el constructor de la clase:


 VentanaFormulario(String strTitulo, int intAncho, int intAlto)
    {
        super(strTitulo);
        this.setSize(intAncho, intAlto);
        this.setLocationRelativeTo(null);       //Centrar ventana en pantalla

        //Box vertical por que los botones van a estar abajo
        Box boxVContenidoVerticalVentana = Box.createVerticalBox();
        crearCamposVentana();
        crearBotones();
        //Espacio del borde superior de la ventana al primer Campo
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(30));
        boxVContenidoVerticalVentana.add(boxVCamposVentana);
        //Espacio entre el ultimo campo (sexo) y los botones Guardar y Cancelar
        boxVContenidoVerticalVentana.add(Box.createVerticalStrut(20));
        boxVContenidoVerticalVentana.add(panBotones);

        this.add(boxVContenidoVerticalVentana);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

La linea 3 establece el titulo de la ventana padre (esta clase extiende de JFrame, por lo tanto establece el titulo del JFrame), la linea 4 establece el tamaño, y la linea 5 posiciona la ventana en el centro de la ventana. El metodo setLocationRelativeTo() permite posicionar este JFrame respecto a otro JFrame, pero si le pasamos null, lo posiciona en el centro de la pantalla. La linea 8 crea el Box1 (boxVContenidoVerticalVentana) , que permite distribuir todo el contenido del JFrame en forma vertical.

En la linea 9 se manda a llamar a un metodo que esta implementado abajo y que se encarga de crear los campos de la ventana y agregarlos al vertical Box2 (boxVCamposVentana). En la linea 10 se manda a llamar a otro metodo que esta implementado abajo y que se encarga de crear los Botones Guardar y cancelar, y los mete en un  Box3 (boxHBotones), en este caso este Box es horizontal, ademas, este Box solo es visible en el metodo crearBotones().

La linea 12 me parece interesante por que permite insertar espacios entre los componentes de un Box; para agregar espacios verticales, se usa el metodo Box.createVerticalStrut(num) , donde num es el numero de espacios que deseamos insertar (realmente son como componentes invisibles, que presisamente sirven para ayudar a distribuir los componentes que si se ven). En nuestro caso insertamos 30 espacios en nuestro primer Box (boxVContenidoVerticalVentana) para que los campos de texto no esten muy pegado al borde de la ventana, despues de los espacios es agregar al Box1 los campos de la ventana que estan en el Box2 (boxVCamposVentana), esto se hace en la linea 13.

A continuacion en la linea 15 agregamos otro pocos espacios para que las cajas de texto no queden muy pegadas con los botones que esta en el Box3. Despues agregamos el Box3 (boxHBotones), el cual a su vez esta metido dentro de un JPanel (panBotones), entonces si agregamos el JPanel,. estaremos metiendo el Box3 en el Box1. Esto se hace en la linea 16.

el metodo crearCamposVentana() crea los campos con su respectiva etiqueta y los agrega al Box2:

    private void crearCamposVentana()
    {
        Box boxHMatricula =  Box.createHorizontalBox();
        jlbMatricula = new JLabel("Matricula ");   jtfMatricula = new JTextField(15);
        boxHMatricula.add(Box.createHorizontalStrut(10));
        boxHMatricula.add(jlbMatricula);
        boxHMatricula.add(Box.createHorizontalStrut(14));
        boxHMatricula.add(jtfMatricula);
        JPanel panMatricula =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panMatricula.add(boxHMatricula);

        Box boxHNombre =  Box.createHorizontalBox();
        jlbNombre = new JLabel("Nombre ");   jtfNombre = new JTextField(15);
        boxHNombre.add(Box.createHorizontalStrut(10));
        boxHNombre.add(jlbNombre);
        boxHNombre.add(Box.createHorizontalStrut(20));
        boxHNombre.add(jtfNombre);
        JPanel panNombre =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panNombre.add(boxHNombre);

        Box boxHApellidos =  Box.createHorizontalBox();
        jlbApellidos = new JLabel("Apellidos ");   jtfApellidos = new JTextField(15);
        boxHApellidos.add(Box.createHorizontalStrut(10));
        boxHApellidos.add(jlbApellidos);
        boxHApellidos.add(Box.createHorizontalStrut(11));
        boxHApellidos.add(jtfApellidos);
        JPanel panApellidos =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panApellidos.add(boxHApellidos);

        Box boxHEdad =  Box.createHorizontalBox();
        jlbEdad = new JLabel("Edad ");   jtfEdad = new JTextField(15);
        boxHEdad.add(Box.createHorizontalStrut(10));
        boxHEdad.add(jlbEdad);
        boxHEdad.add(Box.createHorizontalStrut(40));
        boxHEdad.add(jtfEdad);
        JPanel panEdad =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panEdad.add(boxHEdad);

        Box boxHSexo =  Box.createHorizontalBox();
        jlbSexo = new JLabel("Sexo ");   jcbSexo = new JComboBox();
        jcbSexo.addItem("Masculino");
        jcbSexo.addItem("Femenino");
        boxHSexo.add(Box.createHorizontalStrut(10));
        boxHSexo.add(jlbSexo);
        boxHSexo.add(Box.createHorizontalStrut(40));
        boxHSexo.add(jcbSexo);
        JPanel panSexo =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panSexo.add(boxHSexo);

        boxVCamposVentana = Box.createVerticalBox();
        boxVCamposVentana.add(panMatricula);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panNombre);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panApellidos);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panEdad);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panSexo);
    }

En la linea 3 del codigo anterior se empieza a crear el primer campo con el siguiente codigo:

        Box boxHMatricula =  Box.createHorizontalBox();
        jlbMatricula = new JLabel("Matricula ");   jtfMatricula = new JTextField(15);
        boxHMatricula.add(Box.createHorizontalStrut(10));
        boxHMatricula.add(jlbMatricula);
        boxHMatricula.add(Box.createHorizontalStrut(14));
        boxHMatricula.add(jtfMatricula);
        JPanel panMatricula =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panMatricula.add(boxHMatricula);

Primero que nada (linea 1) creamos un Box Horizontal llamado boxHMatricula, a continuacion en la linea 2 creamos una etiqueta (jlbMatricula) y un campo de texto (jtfMatricula) . Enseguida insertamos 10 espacios en el box para que la etiqueta no este muy pegada al borde izquierdo del JFrame (finalmente ahi va a ir a dar), esto se hace en la linea 3. A continuacion en la linea 4 agregamos la etiqueta al Box, despues en la linea 5 se agregan mas espacios al Box para que la etiqueta no este muy pegada al campo de texto (jtfMatricula) que se agrega en la linea 7, este espacio va variando dependiendo de la etiqueta en los otros campos, lo que se trata es ir alineando los campos de texto en la misma columna dentro del JFrame.

Lo que sigue a continuacion es crear un panel que contendra a este Box, lo que pasa es que si no agregamos este Box dentro de un panel los componentes que contiene (un JLabel y un JTextField) trataran de ocupar todo el espacio dentro del Box, y asi se ven todos feos y mal distribuidos. En la linea 7 se crea este panel con alineacion a izquierda (como ves en la imagen, los campos estan alineados a la izquieda del JFrame. En la linea 8 se agrega el Box (que contiene al JLabel y JTextField) al JPanel y asi estos dos componentes quedan alineados a l izquierda.
Para que quede mas claro, la organizacion de los campos de texto es esta:

Como vemos hay un JLabel y un JTextField que a su vez estan contenidos dentro de un Box y a su vez ese Box esta dentro de un JPanel, y asi para los demas campos, cada uno dentro de un Box y asu vez dentros de un JPanel. A su vez todos los JPanel estan contenidos dentro de un Box Vertical (el Box2) y a su vez ese Box se inserta dentro de otro Box principal (el del contructor de la clase, Box1).
La organizacion del Box3 es la siguiente:

Como se ve, el Box3 esta contenido dentro de un panel que hasta ahora no hay habia mostrado. El codigo que genera el box3 (y los dos botones que contiene) es el siguiente:

    private void crearBotones()
    {
        Box boxHBotones = Box.createHorizontalBox();

        btnGuardar = new JButton("Guardar");
        btnCancelar = new JButton("Cancelar");
        boxHBotones.add(btnGuardar);
        boxHBotones.add(Box.createHorizontalStrut(20));
        boxHBotones.add(btnCancelar);
        boxHBotones.add(Box.createHorizontalStrut(40));

        panBotones =  new JPanel(new FlowLayout(FlowLayout.RIGHT) );
        panBotones.add(boxHBotones);
    }

Como se ve en la linea 3 se crea el Box Horizontal (boxHBotones, este es el Box3) y en la linea 5 y 6 se declaran los botones, en las lineas, en la linea 7 se agrega el boton Guardar al Box3. En la linea 8 insertamos 20 espacios al box (para que los botones esten algo separados entre si.) en la linea 9 se inserta el boton Cancelar al Box3. En la linea 10 se insertan 10 espacios mas al Box. En la linea 12 se crea el JPanel con ALINEACION DERECHA; pues los botones ahora los queremos alineados a la derecha del JFrame. En el Constructor se agrega este JPanel (panBotones) al Box1.

Si quisieramos colocar los botones a la derecha de los campos de texto, tendriamos que hacer algunos ligeros cambios. El codigo seria este:

/*
 * Crea una ventana de formulario con varios campos  y dos botones
 * a la derecha
 * Archivo: VentanaFormulario2.java
 * Fecha: 9/12/2009
 */

import javax.swing.*;
import java.awt.FlowLayout;

/**
 *
 * @author gonzasilve@gmail.com
 */
public class VentanaFormulario2 extends JFrame
{
    JLabel jlbMatricula;    JTextField  jtfMatricula;
    JLabel jlbNombre;       JTextField  jtfNombre;
    JLabel jlbApellidos;    JTextField  jtfApellidos;
    JLabel jlbEdad;         JTextField  jtfEdad;
    JLabel jlbSexo;         JComboBox   jcbSexo;
    JButton btnGuardar;
    JButton btnCancelar;
    Box boxVCamposVentana;   //Contiene todo los campos de texto (con su respectiva etiqueta)
    JPanel panBotones;      //Contiene los botones Guardar y Cancelar

    VentanaFormulario2(String strTitulo, int intAncho, int intAlto)
    {
        super(strTitulo);
        setSize(intAncho, intAlto);
        this.setLocationRelativeTo(null);       //Centrar ventana en pantalla

        //Box Horizontal por que los botones van a la derecha
        Box boxHContenidoHorizontalVentana = Box.createHorizontalBox();
        crearCamposVentana();
        crearBotones();
        boxHContenidoHorizontalVentana.add(boxVCamposVentana);
        //Espacio Horizontal entre los campos y los botones
        boxHContenidoHorizontalVentana.add(Box.createHorizontalStrut(20));
        boxHContenidoHorizontalVentana.add(panBotones);

        add(boxHContenidoHorizontalVentana);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void crearCamposVentana()
    {
        Box boxHMatricula =  Box.createHorizontalBox();
        jlbMatricula = new JLabel("Matricula ");   jtfMatricula = new JTextField(15);
        boxHMatricula.add(Box.createHorizontalStrut(10));
        boxHMatricula.add(jlbMatricula);
        boxHMatricula.add(Box.createHorizontalStrut(14));
        boxHMatricula.add(jtfMatricula);
        JPanel panMatricula =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panMatricula.add(boxHMatricula);

        Box boxHNombre =  Box.createHorizontalBox();
        jlbNombre = new JLabel("Nombre ");   jtfNombre = new JTextField(15);
        boxHNombre.add(Box.createHorizontalStrut(10));
        boxHNombre.add(jlbNombre);
        boxHNombre.add(Box.createHorizontalStrut(20));
        boxHNombre.add(jtfNombre);
        JPanel panNombre =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panNombre.add(boxHNombre);

        Box boxHApellidos =  Box.createHorizontalBox();
        jlbApellidos = new JLabel("Apellidos ");   jtfApellidos = new JTextField(15);
        boxHApellidos.add(Box.createHorizontalStrut(10));
        boxHApellidos.add(jlbApellidos);
        boxHApellidos.add(Box.createHorizontalStrut(11));
        boxHApellidos.add(jtfApellidos);
        JPanel panApellidos =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panApellidos.add(boxHApellidos);

        Box boxHEdad =  Box.createHorizontalBox();
        jlbEdad = new JLabel("Edad ");   jtfEdad = new JTextField(15);
        boxHEdad.add(Box.createHorizontalStrut(10));
        boxHEdad.add(jlbEdad);
        boxHEdad.add(Box.createHorizontalStrut(40));
        boxHEdad.add(jtfEdad);
        JPanel panEdad =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panEdad.add(boxHEdad);

        Box boxHSexo =  Box.createHorizontalBox();
        jlbSexo = new JLabel("Sexo ");   jcbSexo = new JComboBox();
        jcbSexo.addItem("Masculino");
        jcbSexo.addItem("Femenino");
        boxHSexo.add(Box.createHorizontalStrut(10));
        boxHSexo.add(jlbSexo);
        boxHSexo.add(Box.createHorizontalStrut(40));
        boxHSexo.add(jcbSexo);
        JPanel panSexo =  new JPanel(new FlowLayout(FlowLayout.LEFT) );
        panSexo.add(boxHSexo);

        boxVCamposVentana = Box.createVerticalBox();
        //Espacio entre el borde superior de la ventana y el primer campo
        boxVCamposVentana.add(Box.createVerticalStrut(30));
        boxVCamposVentana.add(panMatricula);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panNombre);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panApellidos);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panEdad);
        boxVCamposVentana.add(Box.createVerticalStrut(10));
        boxVCamposVentana.add(panSexo);
    }

    private void crearBotones()
    {
        Box boxVBotones = Box.createVerticalBox();

        btnGuardar = new JButton("Guardar ");
        btnCancelar = new JButton("Cancelar");
        //Espacio entre el borde superior de la ventana y el primer campo
        // (Un poco mas abajo que las cajas de texto, estas a estan 30 unidades del borde)
        boxVBotones.add(Box.createVerticalStrut(50));
        boxVBotones.add(btnGuardar);
        boxVBotones.add(Box.createVerticalStrut(10));
        boxVBotones.add(btnCancelar);

        panBotones =  new JPanel(new FlowLayout(FlowLayout.CENTER) );
        panBotones.add(boxVBotones);
    }

    private void mostrar()
    {
        this.setVisible(true);
    }

    public static void main(String args[])
    {
        VentanaFormulario2 formulario1 = new VentanaFormulario2("Ventana de formulario",400,400);
        formulario1.mostrar();
    }
}

Observar los pocos cambios que he realizado; la ejecucion de este codigo genera esta otra ventana:

me despido, hasta pronto.
}

Validar Numero entero en java

Ha veces es necesario comprobar si cierta cadena es un numero o no. Por ejemplo cuando deseamos guardar un dato numerico en una base de datos (campos edad, cantidad, etc), antes de enviarlos a la BD se deben validar para para que el DBMS no nos devuelva error.

El siguiente codigo muestra como validar si en una cadena que llega todos son numeros. Se supone de antemano que a la cadena se le han eliminado espacios al principio y al final.


/*
 Descripcion:
 Contiene un metodo que Valida si una cadena es un numero entero.
 author: gonzasilve@gmail.com
 fecha:  06/12/2009
 archivo CadenaEnteros.java
*/

public class CadenaEnteros
{
 //Devuelve true si en una cadena que llega todos son numeros, false en caso contrario
 public boolean esEntero(String cad)
 {
 for(int i = 0; i<cad.length(); i++)
 if( !Character.isDigit(cad.charAt(i)) )
 return false;

 return true;
 }

 public static void main(String args[])
 {
 CadenaEnteros cadena1 = new CadenaEnteros();
 //Probar con un numero entero valido:   Devuelve true
 System.out.println("\"3432465\" es entero: " + cadena1.esEntero("3432465"));
 //Probar con una cadena invalida:   Devuelve false
 System.out.println("\"34hola\" es entero: " + cadena1.esEntero("34hola"));
 //Probar con una cadena invalida:   Devuelve false
 System.out.println("\"23.5\" es entero: " + cadena1.esEntero("23.5"));
 }
}

Basicamente el metodo recorre la cadena caracter por caracter y comprueba si NO es un digito, si alguno no lo es, devuelve false. Si ninguno fue false llegara la instruccion return true y terminara el metodo.
Ojo, este metodo solo valida NUMERO ENTEROS, los numeros flotantes (con punto decimal) se deben validar con otro metodo. Si se intenta validar un numero flotante con este metodo siempre devolvera false (pues el caracter punto ( . ) no es un digito).

Enseguida se muestra una imagen de la compilacion y ejecucion de la prueba de este metodo en mi sistema Ubuntu.

Aunque la implementacion de esto se puede hacer de muchas formas aqui muestro la manera como se me ocurrio a mi. Es muy util por ejemplo para validar las cadenas introducidas en campos JTextField en una GUI que tenga campos en donde el usuario deba escribir un dato entero.

Espero que le sirva a alguien, hasta pronto.

}

A %d blogueros les gusta esto: