Alteração de jtable usando TableModel

Bom dia pessoal,

Estou com mais uma dúvida em relação a tabela, eu criei uma tabela usando TableModel, e coloquei o método

public boolean isCellEditable(int row, int col){ return true; }

como true, ou seja eu posso alterar uma coluna, quando clico para alterar eu consigo selecionar e alterar mas não que saio daquela coluna ou clico em enter, saí normal mas volta o valor de antes,ou seja se tem na coluna o nome MARCO e quero colocar MARCO AURÈLIO, coloco normal mas na hora que saio da coluna volta para MARCO

o que pode estar acontecendo?

Abaixo TableModel código:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pdv.tablemodels;

import br.com.pdv.beans.Cliente;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author fernegao
 */
public class ClienteTableModel extends AbstractTableModel{
    private List<Cliente> listaProdutos;
    private String[] colunas = {"Código","Nome","Endereço","Bairro","Cidade","Estado","RG","CPF","Telefone","Celular","Email","Data de Nascimento"};

    public ClienteTableModel(){
        listaProdutos = new ArrayList<Cliente>();        
    }
    
    public ClienteTableModel(List<Cliente> lista){
        this();
        listaProdutos.addAll(lista);
    }
    
    @Override
    public int getRowCount() {
        return listaProdutos.size();
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }
    
     public String getColumnName(int column){      
        if(colunas[column] == "Código"){
            return "Código";
        }else if(colunas[column] == "Nome"){            
            return "Nome";
        }else if(colunas[column] == "Endereço"){
            return "Endereço";
        }else if(colunas[column] == "Bairro"){
            return "Bairro";
        }else if(colunas[column] == "Cidade"){
            return "Cidade";
        }else if(colunas[column] == "Estado"){
            return "Estado";
        }else if(colunas[column] == "RG"){
            return "RG";
        }else if(colunas[column] == "CPF"){
            return "CPF";
        }else if(colunas[column] == "Telefone"){
            return "Telefone";
        }else if(colunas[column] == "Celular"){
            return "Celular";
        }else if(colunas[column] == "Email"){
            return "Email";
        }else if(colunas[column] == "Data de Nascimento"){
            return "Data de Nascimento";
        }
        return new String();
    }
    
     public Class getColumnClass(int column){
         //private String[] colunas = {" ","Data","Hora","Aviso","Terminal","Usuário"};
         if(colunas[column] == "Código"){
             return Integer.class;
         }else if(colunas[column] == "Nome"){
            return String.class;
         }else if(colunas[column] == "Endereço"){
             return String.class;
         }else if(colunas[column] == "Bairro"){
             return String.class;
         }else if(colunas[column] == "Cidade"){
             return String.class;
         }else if(colunas[column] == "Estado"){
             return String.class;
         }else if(colunas[column] == "RG"){
             return String.class;
         }else if(colunas[column] == "CPF"){
             return String.class;
         }else if(colunas[column] == "Telefone"){
             return String.class;
         }else if(colunas[column] == "Celular"){
             return String.class;
         }else if(colunas[column] == "Email"){
             return String.class;
         }else if(colunas[column] == "Data de Nascimento"){
             return String.class;
         }
        return String.class;
    }
    

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        Cliente p = listaProdutos.get(rowIndex);
        switch(columnIndex){
            case 0: return p.getCodigo();
            case 1: return p.getNome();
            case 2: return p.getEndereço();
            case 3: return p.getBairro();
            case 4: return p.getCidade();
            case 5: return p.getEstado();    
            case 6: return p.getRg();
            case 7: return p.getCpf();
            case 8: return p.getTelefone();
            case 9: return p.getCelular();    
            case 10: return p.getEmail();
            case 11: return p.getDatanasc();
               
            default: return new String();
        }
    }
    
    public boolean isCellEditable(int row, int col){       
        return true;    
    }
    
    public void updateRow(Cliente p, int row){
        listaProdutos.set(row, p);
        fireTableDataChanged();
    }
    
    public void removeRow(int row){
        listaProdutos.remove(row);
        fireTableDataChanged();
    }
        
    public Cliente getProduto(int row){       
        return listaProdutos.get(row);
    }
    
}

Sobrescreva o método setValueAt do seu modelo e seja feliz!

Fique com Deus! :smiley:

como ficaria este metodo ???

tem como dar um exemplo?

[code]public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

Classe objeto = colecao.get(rowIndex);
if (columnIndex == COLUNAUM) objeto.setAtributoUm(aValue);
if (columnIndex == COLUNADOIS) objeto.setAtributoDois(aValue);
//...

fireTableCellUpdated(rowIndex, columnIndex);

}[/code]

Basicamente isso.
Fique com Deus! :smiley:

Já consegui valeu Nicolas, até mais, com isto consegui terminar minha tela por completo no sistema que estou fazendo agora só falta as outras telas que não vai ser diferente da lógica da Tela do Cadastro de Cliente

só mais uma pergunta como faço para criar um botao Sair, mas que feche só uma tela e não todas eu usei o:

  System.exit(0);

mas o problema é que fecha todas.

[quote=alucardmaas]só mais uma pergunta como faço para criar um botao Sair, mas que feche só uma tela e não todas eu usei o:

  System.exit(0);

mas o problema é que fecha todas.[/quote]
Leia na documentação: o comando System.exit() faz você abortar, sair, finalizar (ou qualquer outro verbo que caiba aqui) a sua aplicação.
Você deve fazer o uso do método dispose(); da classe Window.
Quando você cria um formulário, você define o tipo de operação básica que será executada ao fechar o formulário. Normalmente, para JFrames, usa-se EXIT_ON_CLOSE, e para JDialogs usa-se DISPOSE_ON_CLOSE. Trabalhe com isso e você terá o resultado que procura.

Fique com Deus! :smiley:

valew cara usei o dispose();