Serão mostrados os dados para as telas de consulta. A minha dúvida é se realmente é necessário criar uma TableModel para Cliente, uma para Fornecedor, uma para Venda ... Não posso criar uma TableModel que servirá para todas as situações? Nessa TableModel tenho todos os métedos já impelmentados, menos o getValueAt. Esse método eu implementaria ao instanciar o objeto.
Minha classe TableModel:
package jvendas.modelos;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import jvendas.classes.Base;
public abstract class ModeloTabela extends AbstractTableModel {
private ArrayList rows;
private String[] columnNames;
public ModeloTabela(String[] columnNames) {
rows = new ArrayList<Base>();
this.columnNames = columnNames;
}
public ModeloTabela(ArrayList registros, String[] columnNames) {
this.rows = new ArrayList<Base>();
addRows(registros);
this.columnNames = columnNames;
}
@Override
public String getColumnName(int column) {
return columnNames[column];
}
public int getRowCount() {
return rows.size();
}
public int getColumnCount() {
return columnNames.length;
}
public Base getRow(int rowIndex) {
return (Base) rows.get(rowIndex);
}
public void setRow(int rowIndex, Base row) {
rows.set(rowIndex, row);
fireTableRowsUpdated(rowIndex, rowIndex);
}
public void addRow(Base row) {
rows.add(row);
fireTableRowsInserted(rows.size() -1, rows.size() - 1);
}
public void removeRow(int rowIndex) {
rows.remove(rowIndex);
fireTableRowsDeleted(rowIndex, rowIndex);
}
public void addRows(ArrayList rows) {
this.rows.addAll(rows);
fireTableRowsInserted(0, rows.size() - 1);
}
public abstract Object getValueAt(int rowIndex, int columnIndex);
}
Exemplo de uso na tela de consulta de bancos:
setModelo(new ModeloTabela(new String[] {"Nome", "Código"}) {
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Banco banco = (Banco) getRow(rowIndex);
if (banco == null) {
return null;
} else {
String coluna = getColumnName(columnIndex);
if (coluna.equalsIgnoreCase("Nome")) {
return banco.getNome();
} else if (coluna.equalsIgnoreCase("Código")) {
return banco.getCodigo();
} else {
return null;
}
}
}
});
Exemplo de uso na tela de consulta de agências:
setModelo(new ModeloTabela(new String[] {"Banco", "Nome", "Número"}) {
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Agencia agencia = (Agencia) getRow(rowIndex);
if (agencia == null) {
return null;
} else {
String coluna = getColumnName(columnIndex);
if (coluna.equalsIgnoreCase("Banco")) {
return agencia.getBanco().getNome();
} else if (coluna.equalsIgnoreCase("Nome")) {
return agencia.getNome();
} else if (coluna.equalsIgnoreCase("Número")) {
return agencia.getNumero();
} else {
return null;
}
}
}
});
Gostaria de saber se isso é uma bota pratica, se não é uma gambiarra