Hemos decidido hacernos un programa de agenda telefnica en ordenador, en java.
Como somos bastante hbiles, nos olvidamos de todo el tema de ventanas y decidimos hacer primero el cdigo relativo a la gestin de los datos.
En primer lugar nos hacemos una clase Amigo con varios atributos: nombre, apellido, telfono, direccin, e-mail, etc, etc. Luego nos hacemos una clase ListaAmigos que mantiene la lista de amigos y tiene un montn de mtodos comoaadeAmigo(), borraAmigo(), dameAmigo(int), dimeCuantosAmigosTengo(), etc, etc.
Ya est todo estupendo. Nuestra clase ListaAmigos funciona perfectamente. Adems hemos hecho todo el cdigo para guardar y sacar la ListaAmigos de una base de datos.
Ahora nos decidimos a hacer las ventanitas. En java lo que ms nos gusta para meter la ListaAmigos es un JTable, una especie de tabla con filas y columnas. En cada fila pondremos a un Amigo y en cada columna uno de sus datos: nombre,apellido, etc.
Nos ponemos con el JTable y resulta que el JTable admite como datos un TableModel. Un TableModel es una clase que entre otros tiene los mtodos getColumnCount(), para saber el nmero de columnas de la tabla; getRowCount(), para saber el nmero de filas de la tabla y getValueAt(fila,columna) para saber el dato de una determinada fila y columna.
Vaya por Dios!. Nuestra ListaAmigos no se parece en nada al TableModel, no podemos meterla directamente en un JTable. La pena es que realmente s tiene un parecido, el getRowCount() es similar al dimeCuantosAmigosTengo(), elgetColumnCount() debera devolver el nmero de atributos de la clase Amigo y el getValueAt(fila,columna) debera recoger el dameAmigo(fila) y luego devolver un atributo del Amigo obtenido.
Como no nos apetece deshacer todo lo de ListaAmigos para que se parezca a un TableModel, echamos mano del patrnAdaptador. Con este patrn tenemos que hacer una clase AdaptadorListaAmigosATableModel que tenga dentro unListaAmigos como atributo y que implemente la interface TableModel
public class AdaptadorListaAmigosATableModel implements TableModel { private ListaAmigos listaAmigos; public AdaptadorListaAmigosATableModel (ListaAmigos listaAmigos) { this.listaAmigos=listaAmigos; } ... }
y ahora slo hay que implementar los mtodos de TableModel haciendo las llamadas equivalentes en ListaAmigos
public int getColumnCount() { return 6; // Suponiendo que Amigo tiene 6 atributos }
public int getRowCount() { return listaAmigos.dimeCuantosAmigosTengo(); }
public Object getValueAt (int fila, int columna) { Amigo amigo = listaAmigos.dameAmigo(fila); switch (columna) { case 0: return Amigo.nombre; caso 1: return Amigo.apellido; ... } }
Listo. Nos basta con hacer esto
AdaptadorListaAmigosATableModel adaptador = new AdaptadorListaAmigosATableModel(listaAmigos); JTable tabla= new JTable(adaptador);
para tener metida nuestra ListaAmigos en un JTable.
Por supuesto, TableModel lleva ms mtodos que tambin debemos implementar...