Gostaria da ajuda de vocês para a seguinte situação:
Tenho um JDialog com um JTable que exibe os clientes do banco. Este JDialog possui alguns botões como incluir, alterar e excluir.
Ao selecionar uma das opções, é exibido outro JDialog para realizar a operação de acordo com a opção selecionada e realizar a persistência no banco.
Eu gostaria de saber como fazer para ao persistir um registro no banco (inclusão, alteração ou remoção) fazer com que o JTable atualize…
Obs.: Possuo uma classe que estende AbstractTableModel.
já dei uma olhada na API mas não encontrei um método “refresh” alguém tem alguma dica para o meu caso??
Obrigado pela ajuda.[/quote]
O “refresh” dos dados não é responsabilidade da view e sim do model. Você deve criar um método (por exemplo, update()) na sua classe que estende AbstractTableModel. Nesse método seria feita uma nova consulta ao banco, os dados seriam atualizados e você dispararia um evento para que a view repinte a tabela.
Apesar de isso resolver, não é responsabilidade do seu TableModel fazer consultas diretamente ao banco de dados (aí é que entra uma classe DAO).
[quote=marcosvidolin]Muito obrigado pessoal…
deu tudo certo! =]
Fiz o seguinte:
Já tinha a classe DAO;
Criei um método atualiza() no meu modelo;
na classe de view atualizo a tabela após uma inclusão/alteração/remoção;
Notei que a tabela era atualizado somente depois de dar um “Page Up”, Page Down" ou se clicado em alguma das linhas da tabela:
Então fiz o seguinte: logo após chamar o método atualiza() eu chamei o método repaint() da classe JTable resolvendo meu problema.
Mais uma vez obrigado pela ajuda.
[]'s
[/quote]
A tabela não é redesenhada até que você avise que isso deve ser feito (afinal, a view não tem como adivinhar das mudanças no model). Por isso é obrigação do model disparar eventos para a view atualizar. O jeito correto de se fazer isso é chamar o método “fireTableDataChanged()” no final do seu método “atualiza()” - e não chamar um “repaint()” diretamente na view, OK?