Alterar dados Jtable de Lista Objetos diferente

Olá eu tenho uma tabela onde forneço dados de Pessoa Fisica e Juridica, na Minha tabela eu listo todos com a Cliente que agrega PF e PJ, tenho uma Coluna chamado “Documento” que se for PF mostra Cpf e se for PJ mostra o Cnpj. Até tudo funciona tranquilo, mas quando faço alguma edição em um cadastro eu ainda não encontrei a solução de como alterar a Coluna Documento, caso altero o cnpj ou cpf. Alguem sabe como posso solucionar esse problema, segue o codigo abaixo.

--------------------------------Minha View onde recebo os dados alterados----------------
String id = tabela_cliente.getValueAt(tabela_cliente.getSelectedRow(), 0).toString();

    if (tabela_cliente.getValueAt(tabela_cliente.getSelectedRow(), 4).toString().equals("Juridica")) {
        fmlJuridica = new FormularioCadastroPessoaJuridica(new Frame(), rootPaneCheckingEnabled, id);
        fmlJuridica.setVisible(true);
        if (fmlJuridica.getExcluiu() == true) {
            tableModel.removeRow(tabela_cliente.getSelectedRow());
            tabela_cliente.updateUI();
        }
         
        if(fmlJuridica.getAlterou()== true && fmlJuridica.getExcluiu() == false){
            ClientePessoaJuridica j = fmlJuridica.getcJuridica();
              this.getListaClienteTodos().get(tabela_cliente.getSelectedRow()).setNome(j.getNome());
              this.getListaClienteTodos().get(tabela_cliente.getSelectedRow()).setEmail(j.getEmail());
              this.getListaClienteTodos().get(tabela_cliente.getSelectedRow()).setAtivo(j.getAtivo());
              this.getListaClienteTodos().get(tabela_cliente.getSelectedRow()).setTelefone(j.getTelefone());
              this.getListaClienteTodos().get(tabela_cliente.getSelectedRow()).setTipo(j.getTipo());
              this.getListaClienteTodos().get(tabela_cliente.getSelectedRow()).setTipo(j.getTipo());
              // falta editar na tabela cnpj
              
              
              tabela_cliente.updateUI();
            removeFocoTabela();
            txt_buscar.requestFocus();
        }     

--------------------------------Minha Classe ClienteTable extends AbstractTableModel----------------

package br.com.marcus.model;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

public class ClienteTableModel extends AbstractTableModel {

private List<Cliente> dados = new ArrayList<>();
private String[] colunas = {"Id", "Nome", "Email", "Documento", "Tipo", "Telefone", "Ativo"};

public List<Cliente> getDados() {
    return dados;
}

public void setDados(List<Cliente> dados) {
    this.dados = dados;
}

@Override
public String getColumnName(int column) {
    return colunas[column];
}

@Override
public int getRowCount() { 
    return getDados().size(); 
}

@Override
public int getColumnCount() { 
    return colunas.length; 
}

@Override
public Object getValueAt(int linha, int coluna) { 

    try {
        switch (coluna) {
            case 0:
                return getDados().get(linha).getId();
            case 1:
                return getDados().get(linha).getNome();
            case 2:
                return getDados().get(linha).getEmail();
            case 3:
                if (getDados().get(linha).getTipo().equals("F")) {
                    ClientePessoaFisica f = (ClientePessoaFisica) getDados().get(linha);
                    return f.getCpfFormatado();
                }
                if (getDados().get(linha).getTipo().equals("J")) {
                    ClientePessoaJuridica j = (ClientePessoaJuridica) getDados().get(linha);
                    return j.getCnpjFormatado();
                }

            case 4:
                if (getDados().get(linha).getTipo().equals("F")) {
                    return "Fisica";
                }
                if (getDados().get(linha).getTipo().equals("J")) {
                    return "Juridica";
                }

            case 5:
                return getDados().get(linha).getTelefoneFormatado();

            case 6:
                return getDados().get(linha).getAtivo();
        }
    } catch (ParseException ex) {

    }
    return null;
}

@Override
public void setValueAt(Object valor, int linha, int coluna) {
    switch (coluna) {
        case 0:
            dados.get(linha).setId(Integer.parseInt(valor.toString()));
            break;
        case 1:
            dados.get(linha).setNome((String) valor);
            break;
        case 2:
            dados.get(linha).setEmail((String) valor);
            break;
        case 3:
            if (getDados().get(linha).getTipo().equals("F")) {
                ClientePessoaFisica f = (ClientePessoaFisica) getDados().get(linha);
                f.setCpf((String) valor);
                 dados.get(linha).equals(f.getCpf());
            }

            if (getDados().get(linha).getTipo().equals("J")) {
                ClientePessoaJuridica j = (ClientePessoaJuridica) getDados().get(linha);
                j.setCnpj((String) valor);
                dados.get(linha).equals(j.getCnpj());
            }

            break;
        case 4:
            dados.get(linha).setTipo((String) valor);

            break;
        case 5:
            dados.get(linha).setTelefone((String) valor);
            break;
        case 6:
            dados.get(linha).setAtivo((String) valor);
            break;
    }
    this.fireTableRowsUpdated(linha, linha);
}

public void addRow(Cliente c) {
    this.getDados().add(c);
    this.fireTableDataChanged();
}

public void removeRow(int linha) {
    this.dados.remove(linha);
    this.fireTableRowsDeleted(linha, linha);
}}

Não sei o que estou passando batido.

Repara nesse seu trecho de código você está mudando o valor apenas da Variavel F que é recem criada, mas você não faz um set na sua variável dados, que é onde está o valor da tabela. o comando “EQUALS” apenas informa se um dado é igual ao outro e não altera valor.

A variável f é uma referência ao objeto da lista de dados na posição linha, ou seja, é o mesmo objeto, ela não foi recém criada. :wink:

Utilize variáveis locais, que seu código fica mais legível, veja:

public class ClienteTableModel extends AbstractTableModel {

    private List<Cliente> dados = new ArrayList<>();
    private String[] colunas = { "Id", "Nome", "Email", "Documento", "Tipo", "Telefone", "Ativo" };

    public void addRow(Cliente c) {
        this.getDados().add(c);
        this.fireTableDataChanged();
    }

    @Override
    public int getColumnCount() {
        return colunas.length;
    }

    @Override
    public String getColumnName(int column) {
        return colunas[column];
    }

    public List<Cliente> getDados() {
        return dados;
    }

    @Override
    public int getRowCount() {
        return getDados().size();
    }

    @Override
    public Object getValueAt(int linha, int coluna) {
        try {
            Cliente cliente = getDados().get(linha);
            switch (coluna) {
                case 0:
                    return cliente.getId();
                case 1:
                    return cliente.getNome();
                case 2:
                    return cliente.getEmail();
                case 3:
                    return cliente.getTipo().equals("F")
                            ? ((ClientePessoaFisica) cliente).getCpfFormatado()
                            : ((ClientePessoaJuridica) cliente).getCnpjFormatado();
                case 4:
                        return cliente.getTipo().equals("F")
                                ? "Fisica"
                                : "Juridica";
                case 5:
                    return cliente.getTelefoneFormatado();
                case 6:
                    return cliente.getAtivo();
            }
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
        return null;
    }

    public void removeRow(int linha) {
        this.dados.remove(linha);
        this.fireTableRowsDeleted(linha, linha);
    }

    public void setDados(List<Cliente> dados) {
        this.dados = dados;
    }

    @Override
    public void setValueAt(Object valor, int linha, int coluna) {
        Cliente cliente = dados.get(linha);
        switch (coluna) {
            case 0:
                cliente.setId(Integer.parseInt(valor.toString()));
                break;
            case 1:
                cliente.setNome((String) valor);
                break;
            case 2:
                cliente.setEmail((String) valor);
                break;
            case 3:
                if (cliente.getTipo().equals("F")) {
                    ((ClientePessoaFisica) cliente).setCpf((String) valor);
                } else {
                    ((ClientePessoaJuridica) cliente).setCnpj((String) valor);
                }
                break;
            case 4:
                cliente.setTipo((String) valor);
                break;
            case 5:
                cliente.setTelefone((String) valor);
                break;
            case 6:
                cliente.setAtivo((String) valor);
                break;
        }
        this.fireTableRowsUpdated(linha, linha);
    }
}