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:
[code]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);
}[/code]
Exemplo de uso na tela de consulta de bancos:
[code] 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;
}
}
}
});[/code]
Exemplo de uso na tela de consulta de agências:
[code] 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;
}
}
}
});[/code]
Gostaria de saber se isso é uma bota pratica, se não é uma gambiarra