Problema ao carregar JTable

Estou tendo um problema com carregar uma tabela de clientes, e não estou usando DefaultTableModel, estou puxando uma classe de AbstractTableModel. Acredito ser erro na lógica dela e não estou sabendo resolver, a tabela simplesmente não carrega meu banco. Obrigado

A classe que possui a jTable:

public class telaClientes extends javax.swing.JFrame {

ConnectionFactory con = new ConnectionFactory();
int contador = 0; //para setar ID +=1

ClientesTable modeloTabela = new ClientesTable();  //puxar modelo da outra classe
public telaClientes() {

    initComponents();
    txtIDcli.setEditable(false);
    jTClientes.setModel(modeloTabela);

    carregarTabela();

}

private void carregarTabela() {
 ClientesTable modelo = new ClientesTable();
 jTClientes.setModel(modelo);
 Dao dao = new Dao();

 for (Clientes c: dao.lerClientes()){
 
 c.getID();
 c.getNome();
 c.getRg();
 c.getCpf();
 modelo.addRow(c);
 
 }
}`

A classe do modelo da tabela AbstractTableModel

public class ClientesTable extends AbstractTableModel{

private List<Clientes> dados = new ArrayList<>();
private String[] colunas = {"ID", "NOME", "RG", "CPF"};


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

}
   
public int getRowCount() {
   return dados.size();
}

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

@Override
public Object getValueAt(int linha, int coluna) {
    switch(coluna){
        case 0:
            return dados.get(linha).getID();
        case 1: 
            return dados.get(linha).getNome();
        case 2: 
            return dados.get(linha).getRg();
        case 3:
            return dados.get(linha).getCpf();
    } 
    return null;  
    
}

E o método da classe Dao:

public List <Clientes> lerClientes() {

    List<Clientes> clientes = new ArrayList<>();
    PreparedStatement textoSql;
    ResultSet rs;
    String sql = "select * from clientes;";
    
    try {
        textoSql = conex.getConexao().prepareStatement(sql);
        rs = textoSql.executeQuery();
        while (rs.next()) {
            Clientes cliente = new Clientes();
            cliente.setID(rs.getInt("id"));
            cliente.setNome(rs.getString("nome"));
            cliente.setCpf(rs.getLong("rg"));
            cliente.setRg(rs.getLong("cpf"));
            clientes.add(cliente);
            
        }

    } catch (Exception ErroSQL) {
        System.out.println("Erro ao carregar tabela !");
    }
    
    return clientes;
}

Veja as alterações abaixo:

public class telaClientes extends javax.swing.JFrame {

    ConnectionFactory con = new ConnectionFactory();
    int contador = 0; //para setar ID +=1
    private ClientesTable modeloTabela;

    public telaClientes() {
        initComponents();
        txtIDcli.setEditable(false);
        
        modeloTabela = new ClientesTable() // inicializa o modelo da tabela
        jTClientes.setModel(modeloTabela); // seta o modelo para a tabela
        carregarTabela(); // atualiza o modelo
    }

    private void carregarTabela() {
        Dao dao = new Dao();
        modeloTabela.setDados(dao.lerClientes()); // veja como foi implementado o método setDados na classe ClientesTable
    }
}

O table model:

public class ClientesTable extends AbstractTableModel{

    private List<Clientes> dados = new ArrayList<>();
    private String[] colunas = {"ID", "NOME", "RG", "CPF"};

    public void setDados(List<Clientes> novosDados) {
        this.dados = novosDados;
        fireTableDataChanged(); // "avisa" a JTable que os dados foram atualizados, então ela vai se "repintar"
    }

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

    public int getRowCount() {
        return dados.size();
    }

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

    @Override
    public Object getValueAt(int linha, int coluna) {
        Clientes cliente = dados.get(linha);
        switch(coluna){
            case 0:
                return cliente.getID();
            case 1: 
                return cliente.getNome();
            case 2: 
                return cliente.getRg();
            case 3:
                return cliente.getCpf();
        } 
        return null;  
    }
}
1 curtida

Perfeito Staroski! Muito obrigado, era isso mesmo, fico agradecido!!