JTABLE - Como saber quando acabou a edição de uma célula?

6 respostas
mauber

Boa tarde,

Possuo um interface com um JTable, em uma das colunas permito que o usuário altere o valor, porém neste momento preciso gravar no banco de dados a alteração, logo minha dúvida é:

Como saber que a edição da célula foi finalizada, para que neste momento eu possa gravar a alteração no banco de dados?

Obrigado!!

6 Respostas

Kknd

Pode fazer para gravar quando a cell perder o foco

hvidal

Quando o usuário terminar de editar a célula, a JTable chamará o método setValueAt() do TableModel.

Portanto, crie um table model (por exemplo, herdando de AbstractTableModel) e coloque seu código no método setValueAt().

Grande abraço,
Hugo.

mauber

Ok, mas ainda não cheguei lá, pois agora a alteração que eu faço na célula não fica na célula, pois como sobrepus o método agora ele espera que eu coloque o valor lá, é isso??
Como fazer neste caso??

Obrigado!

private DefaultTableModel model = new DefaultTableModel() { 
        public void setValueAt(Object aValue,  int rowIndex,  int columnIndex) {
            System.out.println("Alterei a linha " + rowIndex + " na coluna " + columnIndex + " o seguinte: (" + value + ")");
            //Aqui vai o código para salvar na BD
        }
    };
ThomasCouto

Fica interessante também ao pressionar ‘esc’ perder o foco também… não sei se no swing/awt já vem isso pronto, no swt precisei fazer…

D

Adiciona o código do método que você reescreveu:

Vector rowVector = (Vector)dataVector.elementAt(rowIndex); rowVector.setElementAt(aValue, columnIndex); fireTableCellUpdated(rowIndex, columnIndex);

cleiton_herrmann

Olá pessoal td bom?

Eu sei que ja faz um certo tempo que ninguem posta neste tópico, mas gostaria de fazer umas perguntas.

Primeiramente quero dizer que se não fosse vc (daniel_s) ter postado essas 3 linhas de código eu ainda estaria tentando reescrever o método setValueAt e fazer com que ele mostrasse o valor na célula, além de executar os demais métodos que eu acrescentei nele. pois não achei em lugar nenhum, uma boa explicação sobre isso, fora aqui neste tópico.

Eu tenho duvidas referentes a essas 3 linhas de código que vc postou daniel_s…

  1. O que é e de onde veio o objeto dataVector da primeira linha?
  2. Por que é criado o vetor rowVector e onde mais ele é utilizado além dessas duas primeiras linha de código?
  3. O que o método fireTableCellUpdated(rowIndex, columnIndex); faz?

Ja fiz td funcionar aqui… porém não consegui entender muito bem o que essas 3 linhas fazem, se alguem puder explicar, seria melhor…

Desde já grato !!! :wink:

Criado 17 de novembro de 2006
Ultima resposta 16 de jan. de 2007
Respostas 6
Participantes 6