Dúvida com eventos em JTable e TableModelListener [ RESOLVIDO ]
2 respostas
BeR
Olá galera do GUJ.
Tenho uma JTable que é populada com os dados vindos de um banco de dados, eu gostaria de guardar em uma List as linhas alteradas pelo usuário, depois dele fazer as alterações, ao clicar o botão "aplicar mudanças" eu poderia atualizar meu banco de dados apenas com as linhas alteradas.
Ai vem o problema: Eu não sei como pegar as linhas alteradas no método tableChanged para guardar em um List.
Considerações: implementei um AbstractTableModel como modelo da minha tabela.
abaixo minha classe TableModelListener
classMyTableModelListenerimplementsTableModelListener{publicMyTableModelListener(){}@OverridepublicvoidtableChanged(TableModelEvente){intpLinha=e.getFirstRow();intuLinha=e.getLastRow();intcoluna=e.getColumn();switch(e.getType()){caseTableModelEvent.UPDATE:System.out.println("voce alterou uma celula\npLinha: "+primeiraLinha+"\nuLinha: "+ultimaLinha+"\ncoluna: "+coluna+"\n");break;}}}
Toda vez que o usuário altera uma célula imprime no Terminal:
Como está implementado o método setValueAt de seu TableModel?
EDIT: achei a implementação no seu último tópico. Troque a linha:
//avisa que os dados mudaram
fireTableDataChanged();por:
//avisa que a célula foi atualizada
fireTableCellUpdated(rowIndex, columnIndex);
Desta forma o TableModelEvent deve ser carregado com os valores certos de first e last row e de column também. O método fireTableDataChanged notifica que o conteúdo da tabela foi modificado, mas não quais linhas e colunas, por isso só deve ser usado, por exemplo, quando uma nova lista de dados é carregada no lugar da antiga.
BeR
Fantástico…era isso mesmo. Mais uma vez muito obrigado Eric.