Cara eu faço assim tenho minha classe TableModel com este código:
package br.com.despesa.tablemodels;
import br.com.despesa.beans.Despesa;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;
public class DespesaTableModel extends AbstractTableModel {
//private String[] colunas = {"Código","Nome","Endereço","Bairro","Cidade","Estado","RG","CPF","Telefone","Celular","Email","Data de Nascimento"};
//constantes que vão representar as colunas
//(só para facilitar o entendimento do código)
private final int codigo = 0;
private final int despesa = 1;
private final int estabelecimento = 2;
private final int data = 3;
private final int mes = 4;
private final int valor = 5;
private final int formadepagamento = 6;
private final int cartao = 7;
private final int datacheque = 8;
private final int numerocheque = 9;
//lista dos produtos que serão exibidos
private List<Despesa> produtos;
public DespesaTableModel() {
produtos = new ArrayList<Despesa>();
}
public DespesaTableModel(java.util.List<br.com.despesa.beans.Despesa> lista) {
this();
produtos.addAll(lista);
}
public int getRowCount() {
//cada produto na lista será uma linha
return produtos.size();
}
public int getColumnCount() {
//vamos exibir só Nome e Quantidade, então são 2 colunas
return 9;
}
@Override
public String getColumnName(int column) {
//qual o nome da coluna
if (column == codigo) {
return "Código";
} else if (column == despesa) {
return "Despesa";
} else if (column == estabelecimento) {
return "Estabelecimento";
} else if (column == data) {
return "Data da Despesa";
} else if (column == mes) {
return "Mês";
} else if (column == valor) {
return "Valor da Despesa";
} else if (column == formadepagamento) {
return "Forma de Pagamento";
} else if (column == cartao) {
return "Cartão";
} else if (column == datacheque) {
return "Data do Cheque";
} else if (column == numerocheque) {
return "Numero do Cheque";
}
return "";
}
@Override
public Class getColumnClass(int columnIndex) {
//retorna a classe que representa a coluna
if (columnIndex == codigo) {
return Integer.class;
} else if (columnIndex == despesa) {
return String.class;
} else if (columnIndex == estabelecimento) {
return String.class;
} else if (columnIndex == data) {
return String.class;
} else if (columnIndex == mes) {
return String.class;
} else if (columnIndex == valor) {
return String.class;
} else if (columnIndex == formadepagamento) {
return String.class;
} else if (columnIndex == cartao) {
return String.class;
} else if (columnIndex == datacheque) {
return String.class;
} else if (columnIndex == numerocheque) {
return String.class;
}
return String.class;
}
public Object getValueAt(int rowIndex, int columnIndex) {
//pega o produto da linha
Despesa p = produtos.get(rowIndex);
//verifica qual valor deve ser retornado
if (columnIndex == codigo) {
return p.getCodigo();
} else if (columnIndex == despesa) {
return p.getDespesa();
} else if (columnIndex == estabelecimento) {
return p.getEstabelecimento();
} else if (columnIndex == data) {
return p.getDatadespesa();
} else if (columnIndex == mes) {
return p.getMes();
} else if (columnIndex == valor) {
return p.getValor();
} else if (columnIndex == formadepagamento) {
return p.getFormadepagamento();
} else if (columnIndex == cartao) {
return p.getCartao();
} else if (columnIndex == datacheque) {
return p.getDatacheque();
} else if (columnIndex == numerocheque) {
return p.getNumerocheque();
}
return "";
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
//no nosso caso todas vão ser editáveis, entao retorna true pra todas
return true;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
//pega o produto da linha
Despesa p = produtos.get(rowIndex);
//verifica qual valor vai ser alterado
if (columnIndex == codigo) {
JOptionPane.showMessageDialog(null, "Campo código não pode ser alterado");
} else if (columnIndex == despesa) {
p.setDespesa(aValue.toString());
} else if (columnIndex == estabelecimento) {
p.setEstabelecimento(aValue.toString());
} else if (columnIndex == data) {
p.setDatadespesa(aValue.toString());
} else if (columnIndex == mes) {
p.setMes(aValue.toString());
} else if (columnIndex == valor) {
p.setValor(aValue.toString());
} else if (columnIndex == formadepagamento) {
p.setFormadepagamento(aValue.toString());
} else if (columnIndex == cartao) {
p.setCartao(aValue.toString());
} else if (columnIndex == datacheque) {
p.setDatacheque(aValue.toString());
} else if (columnIndex == numerocheque) {
p.setNumerocheque(aValue.toString());
}
//avisa que os dados mudaram
fireTableDataChanged();
}
//-----------------------------------------------------
//Métodos personalizados
//-----------------------------------------------------
public void inserir(Despesa p) {
produtos.add(p);
fireTableDataChanged();
}
public void excluir(int pos) {
produtos.remove(pos);
fireTableDataChanged();
}
public void excluir(Despesa p) {
produtos.remove(p);
fireTableDataChanged();
}
public void ordenarPorValor() {
//ordena pelo nome
Collections.sort(produtos, new Comparator<Despesa>() {
@Override
public int compare(Despesa o1, Despesa o2) {
return o1.getDatadespesa().compareTo(o2.getDatadespesa());
}
});
//avisa que a tabela foi alterada
fireTableDataChanged();
}
public void misturar() {
//mistura a lista
Collections.shuffle(produtos);
//avisa que a tabela foi alterada
fireTableDataChanged();
}
public Despesa getCliente(int pos) {
if (pos >= produtos.size()) {
return null;
}
return produtos.get(pos);
}
}
Minha classe Dao parte de Exclusão
public void deleteTabela(Despesa p) {
try {
PreparedStatement stm = this.con.prepareStatement("DELETE FROM table_despesa WHERE codigo = ?");
stm.setInt(1, p.getCodigo());
stm.executeUpdate();
stm.close();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex.getLocalizedMessage(), "Delete Error", JOptionPane.ERROR_MESSAGE);
}
}
e por fim exclusão pela linha da tabela:
private void btnDeletarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDeletarActionPerformed
// TODO add your handling code here:
if(jTable1.getSelectedRow() >= 0){
int confirma = JOptionPane.showConfirmDialog(null, "Deseja realmente remover ?","Aviso", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
if(confirma == 0){
int row = jTable1.getSelectedRow();
Produtos p = dtm.getProduto(row);
new DespesaDap().delete(p);
dtm.removeRow(row);
}
}else{
JOptionPane.showMessageDialog(null, "Selecione a linha q deseja remover","Remover",JOptionPane.WARNING_MESSAGE);
}
Bom estou apanhando bastante para terminar o meu sistema mas eu acho se você conseguir adaptar este código com certeza vai chegar ao resultado desejado.
Espero ter ajudado!!!