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
class MyTableModelListener implements TableModelListener{
	
	public MyTableModelListener(){
		
	}
	
	@Override
	public void tableChanged(TableModelEvent e) {
		int pLinha = e.getFirstRow();
		int uLinha = e.getLastRow();
		int coluna = e.getColumn();
		
		switch(e.getType()){
		case TableModelEvent.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:
voce alterou uma celula primeiraLinha: 0 ultimaLinha: [telefone removido] coluna: -1

2 Respostas

Eric_Yuzo

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.

Criado 17 de setembro de 2011
Ultima resposta 18 de set. de 2011
Respostas 2
Participantes 2