Olá, sou eu de novo.
Como prometido, vamos fazer esta classe AbstractTableModel, desta forma:
package tabelas;
import principal.CadFornecedor;
import javax.swing.table.AbstractTableModel;
public class TableModelFornecedor extends AbstractTableModel {
private List<CadFornecedor> fornecedores
private static final String[] col = {"ID","Razão Social","Nome Fantasia","CNPJ"};
public TableModelFornecedor(List<CadFornecedor> fornecedores){
this.fornecedores = fornecedores;
fireTableStructureChanged();
}
@Override
public int getRowCount() {
return fornecedores.size();
}
@Override
public int getColumnCount() {
return col.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Object[] row = (Object[])fornecedores.get(rowIndex);
return row[columnIndex];
}
@Override
public void setValueAt(Object value, int row, int col) {
Object[] dado = (Object[])fornecedores.get(row);
dado[col] = value;
fireTableCellUpdated(row, col);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex){
/* Aqui voce indica qual coluna vai ser editável ou não,
Abaixo, somente a primeira coluna não é editável */
if (columnIndex==0){
return false;
} else {
return true;
}
}
@Override
public Class getColumnClass(int column){
// Aqui voce indica qual tipo de dado é retornado nas colunas
if (column==0){
return Integer.class;
} else {
return String.class;
}
}
public List<CadFornecedores> getDataSet(){
// Aqui voce retorna todo o conjunto de dados
return fornecedores;
}
@Override
public String getColumnName(int column){
// Aqui define os nomes da colunas
return col[column];
}
public Object[] getRow(int row) {
// Aqui voce retorna um linha de registro inteira.
return (Object[]) fornecedores.get(row);
}
public void removeRow(int row) {
// Aqui voce remove uma linha específica
fornecedores.remove(row);
fireTableDataChanged();
}
public void addRow(Object[] row) {
// Aqui voce acrescenta uma linha com um conjunto de registros específico
fornecedores.add(row);
fireTableDataChanged();
}
public void addEmptyRow(){
// Aqui voce acrescenta uma linha em branco
Object[] row = {0,"","",""};
fornecedores.add(row);
fireTableDataChanged();
}
}
Bom, no momento da instanciação do seu JTable tmFornecedores, voce vai instanciar assim:
....
List<CadFornecedores> fornecedor;
JTable tmFornecedores = new JTable(new TableModelFornecedor(fornecedor));
// Se o List fornecedor estiver vazio, na linha debaixo, ele cria um JTable vazio também,
....
Agora lá no método mostraPesquisa, configure-o assim:
private void mostraPesquisa(List<CadFornecedor> fornecedores) {
tmFornecedor.setModel(new TableModelFornecedor(fornecedores));
/* Não se preocupe em limpar o JTable primeiro, pois quando voce cria uma nova Classe
TableModelFornecedor ele substitue a nova classe apagando a anterior */
}
Agora quando voce quiser:
// Acrescentar uma linha em branco
(TableModelFornecedor)tmFornecedor.getModel().addEmptyRow();
// Remover uma linha específica, digamos a linha 5, que corresponde o número de linha 4.
(TableModelFornecedor)tmFornecedor.getModel().removeRow(4);
// Pegando todos os fornecedores dentro do JTable:
List<CadFornecedores> fornec = (TableModelFornecedor)tmFornecedor.getModel().getDataSet();
// Acrescentando um conjuto de registros dentro do JTable
Object[] dados = {24,"Tabajara Xuruca","Xurupita","[CPF removido]"}
(TableModelFornecedor)tmFornecedor.getModel().addRow(dados);
Bom, se voce observar, eu tive que fazer o Casting (TableModelFornecedor) com getModel do JTable, isto porque o getModel do JTable retorna uma classe do tipo TableModel, portanto deve-se fazer a conversão para TableModelFornecedor que é AbstractTableModel. Existe também um meio de se evitar de escrever tanto Casting assim, que é criar um método desta forma:
public TableModelFornecedor getModelFornecedor() {
return (TableModelFornecedor)tmFornecedor.getModel();
}
Agora é só substituir as dicas acima assim:
// Acrescentar uma linha em branco
getModelFornecedor().addEmptyRow();
// Remover uma linha específica, digamos a linha 5, que corresponde o número de linha 4.
getModelFornecedor().removeRow(4);
// Pegando todos os fornecedores dentro do JTable:
List<CadFornecedores> fornec = getModelFornecedor().getDataSet();
// Acrescentando um conjuto de registros dentro do JTable
Object[] dados = {24,"Tabajara Xuruca","Xurupita","[CPF removido]"}
getModelFornecedor().addRow(dados);
Repare quanto código voce enxugou :shock:
:lol: 8)