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

lunes, 15 de diciembre de 2014

Construyendo tu programa II


    Por fin toca ya empezar a programar! Para seguir con esto voy a hacer una sencilla aplicación que de momento simplemente almacenará y mostrará datos sobre unos empleados. De esta frase tenemos que extraer los tres apartados que mencioné en el apartado anterior. Los datos en este caso será una clase empleado, las clases gestoras serán la GestoraEmpleados que será un ArrayList<Empleado> y una clase que se encargará de procesar la información que veremos en la tabla, un ModeloTabla y una Ventana para introducir y mostrar datos.

    Nos queda algo así:


    La  clase Empleado tendrá id, nombre, apellido y sueldo, no me voy a complicar mucho con eso. En cuanto a la GestoraEmpleados  quedará algo como esto, ya lo "complicaremos"(no es un String) más para hacerlo más útil en el futuro:
public class GestoraEmpleados extends ArrayList<Empleado>{
  
    public GestoraEmpleados() {
    }

    public GestoraEmpleados(ArrayList<Empleado> datosIniciales) {     
        super(datosIniciales);
    }   
}
    Uso el segundo constructor para el caso en que haga persistencia de datos de la manera que sea, pueda añadir rápidamente Empleados al ArrayList. El modelo tabla será algo así, también lo iremos simplificando más a delante, según añada funcionalidades al programa.

public class ModeloTablaEmpelados extends DefaultTableModel {

    // Son estáticas por que son iguales para todos los ModeloTablaEmpelados
    private static String[] columnas = {"ID", "NOMBRE", "APELLIDO", "SUELDO"};
    private static Class[] clases = {Integer.class, String.class, String.class, Integer.class};
  
    private final int filas;
    private final Empleado[] datos;
    private Empleado empleadoActual;

    public ModeloTablaEmpelados(Empleado[] empleados) {

        this.datos = empleados;
        filas = empleados.length;
    }

    public ModeloTablaEmpelados(ArrayList<Empleado> empleados) {

        this.datos = empleados.toArray(new Empleado[empleados.size()]);
        filas = empleados.size();
    }

    @Override
    public int getRowCount() {

        return filas;
    }

    @Override
    public int getColumnCount() {

        return columnas.length;
    }

    @Override
    public String getColumnName(int columnIndex) {

        return columnas[columnIndex];
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {

        return clases[columnIndex];
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {

        return false;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {

        if (datos.length > 0) {

//             Guardo el empleado de la fila actual para ahorrar algo de
//            procesador a cambio de memoria, pues dar datos a una tabla es caro
//            en procesamiento
            if (columnIndex == 0) {
                empleadoActual = datos[rowIndex];
            }

//             Ya haremos algo para que este modelo no sea tan feo, pero es una
//            manera fácil de entender.
            switch (columnIndex) {

                case 0:
                    return empleadoActual.getId();
                case 1:
                    return empleadoActual.getNombre();
                case 2:
                    return empleadoActual.getApellido();
                case 3:
                    return empleadoActual.getSueldo();
            }
        }

        return null;
    }
}
    Puede que os preguntéis por que sobrescribo DefaultTableModel en vez de implementar la interface TableModel y es por que hay métodos que no me interesa implementar y ya lo hace DefaultTableModel por mi. Aparte de que es más claro y más correcto crear una clase que haga exactamente lo que quieras que usar métodos de DefaultTableModel a lo bruto en medio del código de la ventana. Pero ya usaremos el TableModel para este modelo tabla más adelante, en una entrada algo más a fondo. De momento usemos DefaultTableModel que va a ser más sencillo para la gente que no esté muy familiarizada.

    Hasta aquí Construyendo tu programa II, en la siguiente entrada de Construyendo tu programa hablaré de como funcionará la ventana y la entrada de datos y hablaré un poco de la validación de esos datos.

    Sigue en: http://morethansimplycode.blogspot.com.es/2014/12/patron-singleton.html
  

No hay comentarios:

Publicar un comentario