ModeloPrincipalTableModel
Clase modelo de tabla abstracta que facilita el trabajo con JTable
.
Para su uso solo es necesario adicionarle el comportamiento de como se generan nuevas filas con los elementos at贸micos de la lista (los elementos que se van a mostrar en el JTable
); definir el n煤mero de columnas y sus respectivos nombres en el constructor de la clase hija; adem谩s se parametriza el modelo con el objeto at贸mico de las listas.
脥ndice de contenido
M茅todos implementados
Listado de m茅todos:
Eliminar Filas
- Arquetipo:
eliminarFilas()
- Descripci贸n: Permite eliminar enteramente el contenido de la tabla.
Ejemplo de uso:
TablaModelo modelo = new TablaModelo(); //Clase que hereda de ModeloPrincipalTableModel modelo.eliminarFilas(); //Elimina el contenido de la tabla
Actualizar dado List y Comparator
- Arquetipo:
actualizar(List, Comparator)
- Par谩metros:
List
de elementos,Comparator
de dichos elementos. - Descripci贸n: Permite actualizar la tabla con la lista pasada, y ordenarla usando el Comparator pasado.
- Particularidades: El m茅todo primero ordena la lista, luego borra el contenido de la tabla, y adiciona los elementos de la lista a la tabla.
Ejemplo de uso:
TablaModelo modelo = new TablaModelo(); //Clase que hereda de ModeloPrincipalTableModel y est谩 parametrizada con Integer List<Integer> lista = new ArrayList<>(Arrays.asList(4,2,1,7,3,9,0)); //Lista a mostrar en la tabla Comparator<Integer> cmp = Collections.reverseOrder(lista); //Crea un comparator que permite ordenar la lista de mayor a menor modelo.actualizar(lista,cmp); //Actualiza la tabla
Actualizar dado List
- Arquetipo:
actualizar(List)
- Par谩metros:
List
de elementos. - Descripci贸n: Permite actualizar la tabla con la lista pasada (sin ordenarla).
- Particularidades: El m茅todo primero borra el contenido de la tabla, y adiciona los elementos de la lista a la tabla.
Ejemplo de uso:
TablaModelo modelo = new TablaModelo(); //Clase que hereda de ModeloPrincipalTableModel y est谩 parametrizada con Integer List<Integer> lista = new ArrayList<>(Arrays.asList(4,2,1,7,3,9,0)); //Lista a mostrar en la tabla modelo.actualizar(lista); //Actualiza la tabla
Celda Editable
- Arquetipo:
isCellEditable(int,int)
- Par谩metros: Fila y columna.
- Descripci贸n: Se sobreescribi贸 este m茅todo para que las celdas de la tabla no sean modificables. Si desea otro comportamiento sobreescribir este m茅todo.
M茅todos a implementar
Listado de m茅todos:
Adicionar elementos at贸micos
- Arquetipo:
adicionar(T)
- Par谩metros:
T
elemento a agregar. - Descripci贸n: Permite implementar el comportamiento de c贸mo se adicionan los elementos at贸micos de la lista a la tabla.
- Particularidades: Se recomienda implementar en este m茅todo la manera en que se agregan los elementos at贸micos de la lista vinculada con la tabla. Use el m茅todo
addRow(Object[])
para lograr esto. Ejemplo de uso:
//Clase que hereda de ModeloPrincipalTableModel que muestra una lista de n煤meros dada en una tabla de una columna public class ListadoTableModel extends ModeloPrincipalTableModel<Integer>{ private static final long serialVersionUID = 1L; public ListadoTableModel(){ String[] nombreColumnas = {"Num"}; this.setColumnIdentifiers(nombreColumnas); } @Override public void adicionar(Integer t) { this.addRow(new Object[] {t}); } }
Ejemplo de Uso
Para poder usar el modelo se deben seguir los siguientes pasos:
- Crear una clase que herede de
ModeloPrincipalTableModel
- Parametrizar
ModeloPrincipalTableModel
con los elementos at贸micos de la lista que se va a mostrar en la tabla - Definir en el constructor de la nueva clase la cantidad y los nombres de las columnas de la tabla
- Implementar el m茅todo
adicionar(T)
el cual va a estar sustituidaT
por la clase con que se parametriz贸ModeloPrincipalTableModel
- La implementaci贸n de
adicionar(T)
se basa en definir el comportamiento de c贸mo se agregan los elementos at贸micos de las listas a la tabla, es decir, c贸mo se agregan las filas.
Un ejemplo de uso concreto:
Clase Persona:
//Clase at贸mica de la lista a mostrar en la tabla
public class Persona {
private String nombre;
private String primerApellido;
private String segundoApellido;
private String ci;
private Integer id;
//Generate Getters, Setters and Constructor
}
Clase ListadoTableModel:
//Clase que hereda de ModeloPrincipalTableModel y permite mostrar adecuadamente los datos de la lista de Persona en la tabla
public class ListadoTableModel extends ModeloPrincipalTableModel<Persona>{
private static final long serialVersionUID = 1L;
public ListadoTableModel(){
String[] nombreColumnas = {"Identificador","Nombre", "Primer Apellido", "Segundo Apellido", "CI"};
this.setColumnIdentifiers(nombreColumnas);
}
@Override
public void adicionar(Persona t) {
Integer id = t.getId();
String nombre = t.getNombre();
String pApellido = t.getPrimerApellido();
String sApellido = t.getSegundoApellido();
String ci = t.getCi();
this.addRow(new Object[] {id,nombre,pApellido,sApellido,ci});
}
}
Clase PruebaModeloTabla:
//Clase que permite probar la tabla
public class PruebaModeloTabla extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel contentPane;
private JTable tablaPersonas;
private ListadoTableModel modelo;
private ArrayList<Persona> lista;
public PruebaModeloTabla() {
lista = Inicializadora.inicializarListadoPersonas();
setBounds(100, 100, 920, 500);
setResizable(false);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JScrollPane panelListado = new JScrollPane();
panelListado.setBounds(15, 101, 884, 343);
contentPane.add(panelListado);
modelo = new ListadoTableModel();
tablaPersonas = new JTable();
tablaPersonas.setModel(modelo);
panelListado.setViewportView(tablaPersonas);
actualizarTabla();
setLocationRelativeTo(null);
}
public void actualizarTabla(){
modelo.actualizar(lista);
}
}
C贸digo Fuente
public abstract class ModeloPrincipalTableModel<T> extends DefaultTableModel{
private static final long serialVersionUID = 1L;
public void eliminarFilas() {
this.setRowCount(0);
}
public abstract void adicionar(T t);
public void actualizar(List<T> listado, Comparator<? super T> comparador) {
try{
Collections.sort(listado,comparador);
}catch(Exception e){}
actualizar(listado);
}
public void actualizar(List<T> listado){
if(listado!=null) {
this.eliminarFilas();
for(T t : listado)
adicionar(t);
}
}
@Override
public boolean isCellEditable(int row, int column) { //
return false;
}
}
Clases utilizadas (Importaciones)
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.table.DefaultTableModel;