Olá pessoal
Sou um programador velho que já programou muita coisa orientada a eventos, mas que ficou muito tempo sem programar nada e estou iniciando agora em Java. Já li muita coisa e peguei muitos exemplos aqui no GUJ mas não consegui entender direito algumas coisas com relação aos listeners do JTable.
Estou desenvolvendo uma pequena aplicação de teste utilizando JAVA SE Desktop, JDBC e SWING (usando a IDE do Eclipse)
Criei uma pequena classe de teste Pessoa com dois campos um id inteiro e um nome String.
criei uma classe dao que busca dados de uma tabela e que retorna uma lista de Pessoa. Já testei a classe inteira e os inserts, deletes e selects funcionam perfeitamente.
criei uma classe derivada de Jframe contendo somente um jtable e 2 botões (Insert e Delete).
Implementei um tableModel baseado no modelo que foi postado pelo marcobiscaro2112 em http://www.guj.com.br/java/149034-duvidas-ao-fazer-uma-consulta
Consegui popular o jtable com dados vindos da classe DAO. Consegui incluir e remover linhas do Jtable utilizando os métodos do tableModel. E vi que ele possui chamada para vários métodos do tipo (fireTableRowsInserted, fireTableRowsDeleted, etc)
O que eu queria era fazer algo do tipo: quando o usuario clicasse no botão delete, ele apagasse a linha do table model e também do banco de dados.
Consegui fazer isso adicionado um actionListener ao botão e depois utilizando os método remove do TableModel e o método delete do Dao Ex:
meuTablemodel.remove(3);
meuDao.delete(3);
Mas gostaria que isso fosse realizado automaticamente tipo: Quando eu remover a linha do Model ele já executa a funcao delete no Dao. Tentei adicionar um listener na tabela para tentar ler o evento e remoção de linhas, mas percebi que nem ela e nem o modelo possui um addTableRowsDeletedListener ou coisa do tipo, somente um “addTableModelListener”.
Pelo que entendi eu tenho criar uma nova Classe derivada de JTABLE implementando a TableModelListener, adicionar este TableModelListener ao model da tabela usando
table.getModel().addTableModelListener(this);
e depois criar um método
“public void tableChanged(TableModelEvent e)”
E quando este método for chamado tenho que tratar o tipo de “e”, por exemplo:
if (e.getype() == INSERT) meuDao.insereNovo()
if (e.getype() == DELETE) meuDao.delete()
if (e.getype() == UPDATE) meuDao.atualiza()
Isso me pareceu bem complicado a primeira vista, mas lendo um pouco sobre java descobri que muitas vezes a falta de conhecimento profundo da linguagem é que faz com que compliquemos coisas que podem ser bem mais simples (e este é o meu caso) . Então aí fica a pergunta, estou complicando algo que pode ser bem mais fácil ou esta é a forma “correta” de se fazer isso em Java?
Desde já agradeço pela ajuda
Wilker José Pereira