// // // // // // //

domingo, 28 de diciembre de 2014

Construyendo tu programa III


    Hechos los cambios oportunos en la Gestora para adaptarnos al patrón singleton, hoy toca crear la ventana  e introducir y mostrar los datos. Lo primero es crear nuestro JFrame, que actuará de ventana principal y poner los controles, con nombre apropiados y siguiendo un estándar en ella. Recomiendo simplicidad y amplitud, sin sobrecarga, aunque en este caso, como no hay mucho que poner, y no es más que un ejemplo lo dejaré así:



    Como veis no me he complicado la vida, pero la Interfaz de Usuario tiene que ser simple y entendible. También he puesto nombres reconocibles a los diferentes controles.

    Ahora le daremos un modelo a la tabla, si usamos NetBeans: menú contextual > customize code. Para ello necesitamos un campo GestoraEmpleados llamado gestora (o como queráis) en la Ventana y cambiar lo siguiente:


















      Lo siguiente es inicializar la GestoraEmpleados en el constructor de la Ventana, siempre antes del initcomponentes, o de la linea donde le adjudiquéis el ModeloTabla a la Tabla, o dará un NullPointerException:
public class Ventana extends javax.swing.JFrame {

    private GestoraEmpleados gestora;
  
    public Ventana() {

        gestora = GestoraEmpleados.dameGestora();
        initComponents();       
}
    Ahora hay que definir un método en la clase gestora para añadir un empleado con tres argumentos: el nombre, los Apellidos y el Sueldo. El campo id irá incrementando en función de los empleados que se vayan introduciendo y al Gestora se encargará de ello. La gestora quedaría así:
public class GestoraEmpleados extends ArrayList<Empleado>{
  
    private static GestoraEmpleados unicaGestora;
    private int nSiguienteEmpleado;
  
    public static GestoraEmpleados dameGestora(){
      
        if(unicaGestora == null)
            unicaGestora = new GestoraEmpleados();
      
        return unicaGestora;
    }
  
    private GestoraEmpleados() {
      
        nSiguienteEmpleado = 0;
    } 
  
    public boolean introduceEmpleado(String nombre, String apelldos, int sueldo){
      
        Empleado e = new Empleado(nSiguienteEmpleado, nombre, apelldos, sueldo);
      
        // Antes de aumentar el número de empleado compruebo si soy capaz de introducirlo
        if(this.add(e)){
          
            nSiguienteEmpleado++;
            return true;
        }   
        return false;           
    }
}
    Ya hecho el método, toca recoger los datos, para ello, usaremos un ActionListener (en NetBeans doble click en el control o click derecho > eventos > acción) que usará los métodos getText de los JTextField para recoger la entrada, la validará con expresiones regulares y, si es válida, añadirá un empleado.
String nombre = tNombre.getText();
        String apellidos = tApellidos.getText();
        // La entrada que recogemos de un JTextField es un string que tendremos
        //que validar antes de convertirlo a int
        String sueldo = tSueldo.getText();
      
        if(nombre.isEmpty() || apellidos.isEmpty() || sueldo.isEmpty()){
          
            // Compruebo que todos loscampos tengan al menos un caracter
            JOptionPane.showMessageDialog(this, "Rellena todos los campos");           
          
        }else if(!nombre.matches("[A-Za-zñÑ]*") || !apellidos.matches("[A-Za-zñÑ]*")){
          
            // Compruebo que el nombre y apellidos solo tenga letras
            JOptionPane.showMessageDialog(this, "El nombre o apellidos contiene "
                    + "caracteres no válidos, introduzca letras del alfabeto español");
          
        }else if(!sueldo.matches("[0-9]*")){
          
            // Compruebo que el sueldo solo tenga números
            JOptionPane.showMessageDialog(this, "El sueldo no es un número");
          
        }else{
          
            gestora.introduceEmpleado(nombre, apellidos, Integer.parseInt(sueldo));
            JOptionPane.showMessageDialog(this, "El empleado se ha introducido");
        }
      
        refrescarTabla();
   Compruebo diversas cosas, para ofrecer un mensaje adecuado al usuario en función de lo que falle en la validación de la entrada. He usado expresiones regulares, de las que probablemente hablaré en una entrada solo para ellas. en el botón limpiar usaremos los métodos setText("") de los campos para vaciarlos. Para refrescar la tabla en el botón, de momento usaremos la siguiente linea:

tablaEmpleados.setModel(new ModeloTablaEmpelados(gestora));

    Hasta aquí la tercera entrega de Construyendo tu programa. En las próximas hablaré de como refactorizar este código para hacerlo más escalable y genérico, de como usar Bases de Datos para aguardar la información y algunas cosas más que me parezcan útiles.

No hay comentarios:

Publicar un comentario