[RESOLVIDO] Como executar uma ação logo após a edição de uma célula?

Olá pessoal,

Procuro fazer uma tabela onde, após a edição de uma célula e o clique em algum outro ponto (quando a célula deixar de estar em edição) seja disparada uma ação imediatamente (por exemplo, um JOptionPane.showMessageDialog).

Alguém pode me ajudar a fazer isso?

Cara faz assim hooo…

Cria um método com o evendo FocusLost … assim hoooo

private void seuJTextFieldFocusLost(java.awt.event.FocusEvent evt) { JOptionPane.showMessageDialog(null,"Perde o foco ... chama a caixa de msg"); }

Bele …

Falow

T+

Olá silva.fernandes, tudo bem?

Acho que não fui o suficientemente claro. Preciso tratar uma tabela, e não um JTextField. Se eu tentar adaptar a sua sugestão ao meu problema, o que vou obter uma mensagem quando a tabela perde o foco, no entanto, preciso de uma mensagem (na verdade, não é exatamente uma mensagem que quero, quero outro tipo de ação, mas usei a mensagem como exemplo pra pescar o princípio de como fazer a coisa) que seja disparada quando uma célula perde o foco, e não a tabela toda. Um exemplo disso é eu mudar de célula dentro da própria tabela. A tabela ainda está em foco, mas é a célula que está realmente “focada”.

Nesse caso faça como o Silva Fernandes lhe explicou e depois coloque esse JTextField como cell editor da tabela.

Por outro lado a class JTable possui um método chamado editingStopped (forma geral :void editingStopped(ChangeEvent e)) que performa acções assim que uma célula acabe de ser editada, tente usá-lo.

Vê se isso te ajuda.

Olá Rodrigo,

O link que você colocou serviu de partida para resolver meu problema, o código completo da TableModel ficou:

//Gerando um modelo para a tabela private DefaultTableModel model = new DefaultTableModel( new Object [][] { {"A[1,2]", null}, {"A[3,1]", null}, {"A[2,1]", null}, {"A[3,3]", null} }, new String [] { "Endereço", "Elemento" } ) { Class[] types = new Class [] { java.lang.String.class, java.lang.String.class }; boolean[] canEdit = new boolean [] { false, true }; public Class getColumnClass(int columnIndex) { return types [columnIndex]; } public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit [columnIndex]; } //aqui está o código para gerar a ação logo após a edição da célula public void setValueAt(Object aValue, int rowIndex, int columnIndex) { //atualiza o que foi editado na própria tabela super.setValueAt(aValue, rowIndex, columnIndex); if ( (String)aValue != "" ) { //converte o que foi digitado de Object para Integer int valor = Integer.valueOf( (String)aValue ); //pega o elemento da matriz na primeira coluna da tabela String indiceMatriz = (String)tblElementosMatriz.getValueAt(rowIndex, columnIndex-1); int linhaMatriz = Integer.valueOf( indiceMatriz.substring(2,3) ); int colunaMatriz = Integer.valueOf( indiceMatriz.substring(4,5) ); //Aqui vai o código para avaliar o que foi editado if ( valor != matrizIdentificacao[linhaMatriz-1][colunaMatriz-1] ) { JOptionPane.showMessageDialog( tblElementosMatriz, "Olhe para a matriz ao lado e verifique se o que você digitou está correto", "Observe", 1); } } else { JOptionPane.showMessageDialog( tblElementosMatriz, "É necessário digitar um valor numérico", "Aviso", 0); } /*//Para ajudar a entender a lógica dessa parte do programa System.out.println("Valor digitado na tabela: " + valor); System.out.println("Indice da linha da matriz mostrada na tabela: " + linhaMatriz); System.out.println("Indice da coluna da matriz mostrada na tabela: " + colunaMatriz); System.out.println("Valor armazenado na linha x coluna da matriz, de acordo com a tabela: " + matrizIdentificacao[linhaMatriz-1][colunaMatriz-1]); System.out.println(); */ } };

Valeu!!!