Não consigo atualizar o Jtable em uma pesquisa com like

Oi pessoal, estou fazendo uma busca no banco de dados para atualizar um jtable :
isso no botão de pesquisa.
o que não acontece é a atualização do jtable. eu já fiz um debug e ele faz a pesquisa no banco com like e tudo mas não traz a tabela atualizada.
Desculpe mas o código é grandinho, ainda não sei se tem problemas com isso.
veja abaixo.:

package View;

import Dao.ClienteDao;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import modelo.Cliente;

public class CadastroDeClientes extends JFrame implements ActionListener {

    private ClienteDao cd = new ClienteDao();
    private String estadoBtn = "ENTROU";
    private String estadoTB = "INICIAL";
    private String txtNomeAux;
    private JPanel jpCadastro, jpApresenta, jpButton, jpPesquisa;
    private JButton btnInserir, btnEditar, btnExcluir, btnConsultar, btnSalvar, btnCancelar, btnSair, btnPesquisa;
    private JLabel lblCodigo, lblNome, lblCpfCnpj, lblRgIe, lblEndereco, lblBairro,
            lblNumero, lblComplemento, lblCep, lblCidade, lblEstado,
            lblTelefone, lblCelular, lblEmail, lblSexo, lblContato, lblObs, lblPesquisa;
    private JTextField txtCodigo, txtNome, txtEndereco, txtBairro, txtCpfCnpj,
            txtRgIe, txtCidade, txtNumero, txtComplemento, txtCep,
            txtTelefone, txtCelular, txtContato, txtEmail, txtSexo, txtEstado, txtPesquisa;
    private JTextArea txtObs;
    private JTable tabela;
    private DefaultTableModel modelo;
    private JSeparator separador = new JSeparator(JSeparator.HORIZONTAL);

    //aqui tem o construtor toda vez que se inicializa o programa ele inicializa
    public CadastroDeClientes() {
        super("Cadastro de Clientes");
        //código abaixo deixa a tela centralizada.
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds(
                (screenSize.width - 700) / 2, (screenSize.height - 650) / 2, 700, 650);
        setDefaultCloseOperation(
                JFrame.EXIT_ON_CLOSE);
        this.setLayout(null);
        PainelCadastro();
        PainelApresentacao();
        PainelPesquisa();
        PainelBotao();
        controlaBotao();
    }

    public void PainelCadastro() {
        //aqui instancia os paineis
        jpCadastro = new JPanel();
        jpCadastro.setBorder(BorderFactory.createTitledBorder("Cadastro de Clientes"));
        jpCadastro.setSize(675, 280);
        jpCadastro.setLocation(5, 0);
        jpCadastro.setLayout(null);
        //aqui vamos colocar os label´s e os textfield´s
        lblCodigo = new JLabel("Codigo: ");
        lblCodigo.setSize(100, 21);
        lblCodigo.setLocation(400, 140);
        txtCodigo = new JTextField();
        txtCodigo.setSize(20, 21);
        txtCodigo.setLocation(400, 160);

        lblNome = new JLabel("Nome: ");
        lblNome.setSize(100, 21);
        lblNome.setLocation(10, 20);
        txtNome = new JTextField();
        txtNome.setSize(400, 21);
        txtNome.setLocation(10, 40);

        lblCpfCnpj = new JLabel("Cpf/Cnpj: ");
        lblCpfCnpj.setSize(100, 21);
        lblCpfCnpj.setLocation(415, 20);
        txtCpfCnpj = new JTextField();
        txtCpfCnpj.setSize(115, 21);
        txtCpfCnpj.setLocation(415, 40);

        lblRgIe = new JLabel("Rg/Ie: ");
        lblRgIe.setSize(100, 21);
        lblRgIe.setLocation(550, 20);
        txtRgIe = new JTextField();
        txtRgIe.setSize(115, 21);
        txtRgIe.setLocation(550, 40);

        lblEndereco = new JLabel("Endereço: ");
        lblEndereco.setSize(100, 21);
        lblEndereco.setLocation(10, 60);
        txtEndereco = new JTextField();
        txtEndereco.setSize(250, 21);
        txtEndereco.setLocation(10, 80);

        lblNumero = new JLabel("Numero: ");
        lblNumero.setSize(100, 21);
        lblNumero.setLocation(265, 60);
        txtNumero = new JTextField();
        txtNumero.setSize(50, 21);
        txtNumero.setLocation(265, 80);

        lblBairro = new JLabel("Bairro: ");
        lblBairro.setSize(100, 21);
        lblBairro.setLocation(320, 60);
        txtBairro = new JTextField();
        txtBairro.setSize(145, 21);
        txtBairro.setLocation(320, 80);
        lblComplemento = new JLabel("Complemento: ");
        lblComplemento.setSize(100, 21);
        lblComplemento.setLocation(470, 60);
        txtComplemento = new JTextField();
        txtComplemento.setSize(120, 21);
        txtComplemento.setLocation(470, 80);
        lblCep = new JLabel("Cep: ");
        lblCep.setSize(100, 21);
        lblCep.setLocation(595, 60);
        txtCep = new JTextField();
        txtCep.setSize(70, 21);
        txtCep.setLocation(595, 80);
        lblCidade = new JLabel("Cidade: ");
        lblCidade.setSize(100, 21);
        lblCidade.setLocation(10, 100);
        txtCidade = new JTextField();
        txtCidade.setSize(400, 21);
        txtCidade.setLocation(10, 120);
        lblEstado = new JLabel("Estado: ");
        lblEstado.setSize(100, 20);
        lblEstado.setLocation(415, 100);
        txtEstado = new JTextField();
        txtEstado.setSize(50, 20);
        txtEstado.setLocation(415, 120);
        lblEmail = new JLabel("Email: ");
        lblEmail.setSize(100, 21);
        lblEmail.setLocation(470, 100);
        txtEmail = new JTextField();
        txtEmail.setSize(195, 21);
        txtEmail.setLocation(470, 120);
        lblTelefone = new JLabel("Telefone: ");
        lblTelefone.setSize(100, 21);
        lblTelefone.setLocation(10, 140);
        txtTelefone = new JTextField();
        txtTelefone.setSize(100, 21);
        txtTelefone.setLocation(10, 160);
        lblCelular = new JLabel("Celular");
        lblCelular.setSize(100, 20);
        lblCelular.setLocation(115, 140);
        txtCelular = new JTextField();
        txtCelular.setSize(100, 20);
        txtCelular.setLocation(115, 160);
        lblSexo = new JLabel("Sexo: ");
        lblSexo.setSize(100, 20);
        lblSexo.setLocation(220, 140);
        txtSexo = new JTextField();
        txtSexo.setSize(50, 20);
        txtSexo.setLocation(220, 160);
        lblContato = new JLabel("Contato");
        lblContato.setSize(100, 20);
        lblContato.setLocation(280, 140);
        txtContato = new JTextField();
        txtContato.setSize(100, 20);
        txtContato.setLocation(280, 160);
        lblObs = new JLabel("Obs: ");
        lblObs.setSize(100, 20);
        lblObs.setLocation(10, 180);
        txtObs = new JTextArea();
        txtObs.setColumns(20);
        txtObs.setRows(10);
        txtObs.setSize(650, 50);
        txtObs.setLocation(10, 200);
        //aqui colocamos os lb´s e txt´s no painel.
        jpCadastro.add(lblNome);
        jpCadastro.add(txtNome);
        jpCadastro.add(lblEndereco);
        jpCadastro.add(txtEndereco);
        jpCadastro.add(lblNumero);
        jpCadastro.add(txtNumero);
        jpCadastro.add(lblBairro);
        jpCadastro.add(txtBairro);
        jpCadastro.add(lblComplemento);
        jpCadastro.add(txtComplemento);
        jpCadastro.add(lblCep);
        jpCadastro.add(txtCep);
        jpCadastro.add(lblCpfCnpj);
        jpCadastro.add(txtCpfCnpj);
        jpCadastro.add(lblRgIe);
        jpCadastro.add(txtRgIe);
        jpCadastro.add(lblCidade);
        jpCadastro.add(txtCidade);
        jpCadastro.add(lblEstado);
        jpCadastro.add(txtEstado);
        jpCadastro.add(lblEmail);
        jpCadastro.add(txtEmail);
        jpCadastro.add(lblTelefone);
        jpCadastro.add(txtTelefone);
        jpCadastro.add(lblCelular);
        jpCadastro.add(txtCelular);
        jpCadastro.add(lblSexo);
        jpCadastro.add(txtSexo);
        jpCadastro.add(lblContato);
        jpCadastro.add(txtContato);
        jpCadastro.add(lblCodigo);
        jpCadastro.add(txtCodigo);
        jpCadastro.add(lblObs);
        jpCadastro.add(txtObs);
        this.add(jpCadastro);
    }

    public void PainelApresentacao() {
        //aqui instancia o painel de dados do cliente
        jpApresenta = new JPanel();
        jpApresenta.setBorder(BorderFactory.createTitledBorder("Dados de Clientes"));
        jpApresenta.setSize(675, 230);
        jpApresenta.setLocation(5, 340);
        this.jpApresenta.setLayout(new GridLayout(1, 1, 0, 0));
        this.add(jpApresenta);
        criaJtable();
    }

    public void PainelPesquisa() {
        //aqui instancia o painel de pesquisa do nome do cliente
        jpPesquisa = new JPanel();
        jpPesquisa.setBorder(BorderFactory.createTitledBorder("Pesquisa Clientes pelo nome: "));
        jpPesquisa.setSize(675, 45);
        jpPesquisa.setLocation(5, 290);
        this.jpPesquisa.setLayout(new GridLayout(1, 1, 0, 0));
        this.add(jpPesquisa);

        lblPesquisa = new JLabel("Digite Nome: ");
        lblPesquisa.setSize(100, 20);
        lblPesquisa.setLocation(10, 20);

        txtPesquisa = new JTextField();
        txtPesquisa.setSize(400, 21);
        txtPesquisa.setLocation(90, 20);

        ImageIcon pesquisar = new javax.swing.ImageIcon(getClass().getResource("/images/Pesquisar_24x24.png"));
        btnPesquisa = new JButton("Pesquisar", pesquisar);
        btnPesquisa.addActionListener(this);

        jpPesquisa.add(lblPesquisa);
        jpPesquisa.add(txtPesquisa);
        jpPesquisa.add(btnPesquisa);
    }

    private void criaJtable() {

        ClienteDao cli = new ClienteDao();
        modelo = new DefaultTableModel();
        tabela = new JTable(modelo) {

            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
        };
        limpaTabela(tabela, modelo);

        tabela.getModel();
//        modelo.setNumRows(0);
//        modelo.setColumnCount(0);
        //adicionando colunas na tabela
        modelo.addColumn("Codigo");
        modelo.addColumn("Nome do Clientes");
        modelo.addColumn("Telefone");
        modelo.addColumn("Celular");

        //dimensionando o tamanho das colunas na tabela
        tabela.getColumnModel().getColumn(0).setPreferredWidth(5);
        tabela.getColumnModel().getColumn(1).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(2).setPreferredWidth(50);
        tabela.getColumnModel().getColumn(3).setPreferredWidth(50);
        System.out.println("o estado da tabela é" + estadoTB);
        if (estadoTB.equals("INICIAL")) {
            estadoTB = "PESQUISA";
            List clientes = cli.buscarTodos();
            for (Object c : clientes) {
                Cliente cl = (Cliente) c;
                modelo.addRow(new Object[]{cl.getId(), cl.getNome(), cl.getTelefone(), cl.getCelular()});
            }
        } else {
            estadoTB = "INICIAL";
            List clienteslk = cli.pesquisaLike(txtPesquisa.getText().toUpperCase());
            for (Object c : clienteslk) {
                Cliente cl = (Cliente) c;
                modelo.addRow(new Object[]{cl.getId(), cl.getNome(), cl.getTelefone(), cl.getCelular()});
            }
        }
        tabela.setVisible(true);
        //manipulando o cabeçalho da planilha
        JTableHeader header = tabela.getTableHeader();
        header.setBackground(Color.ORANGE);
        JScrollPane pane = new JScrollPane(tabela);
        jpApresenta.add(pane);
        this.add(jpApresenta);

        tabela.addMouseListener(new MouseAdapter() {

            @Override
            public void mouseClicked(MouseEvent e) {
                int cod = 0;
                cod = (Integer) modelo.getValueAt(tabela.getSelectedRow(), 0);
                ClienteDao cd = new ClienteDao();
                cd.getCliente(cod);
                txtNome.setText(cd.getCliente(cod).getNome());
                txtCpfCnpj.setText(cd.getCliente(cod).getCpfcnpj());
                txtRgIe.setText(cd.getCliente(cod).getRgie());
                txtEndereco.setText(cd.getCliente(cod).getEndereco());
                txtNumero.setText(cd.getCliente(cod).getNumero());
                txtBairro.setText(cd.getCliente(cod).getBairro());
                txtComplemento.setText(cd.getCliente(cod).getComplemento());
                txtCep.setText(cd.getCliente(cod).getCep());
                txtCidade.setText(cd.getCliente(cod).getCidade());
                txtEstado.setText(cd.getCliente(cod).getEstado());
                txtEmail.setText(cd.getCliente(cod).getEmail());
                txtTelefone.setText(cd.getCliente(cod).getTelefone());
                txtCelular.setText(cd.getCliente(cod).getCelular());
                txtSexo.setText(cd.getCliente(cod).getSexo());
                txtContato.setText(cd.getCliente(cod).getContato());
                txtObs.setText(cd.getCliente(cod).getObs());

            }
        });
    }
    public void PainelBotao() {
        ImageIcon inserir = new javax.swing.ImageIcon(getClass().getResource("/images/Incluir_24x24.png"));
        ImageIcon salvar = new javax.swing.ImageIcon(getClass().getResource("/images/Salvar_24x24.png"));
        ImageIcon excluir = new javax.swing.ImageIcon(getClass().getResource("/images/Excluir_24x24.png"));
        ImageIcon cancelar = new javax.swing.ImageIcon(getClass().getResource("/images/Cancelar_24x24.png"));
        ImageIcon sair = new javax.swing.ImageIcon(getClass().getResource("/images/Sair_24x24.png"));

        jpButton = new JPanel();
        jpButton.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jpButton.setSize(670, 35);
        jpButton.setLocation(7, 575);
        this.jpButton.setLayout(new GridLayout(1, 1, 0, 0));

        btnInserir = new JButton("Inserir", inserir);
        btnSalvar = new JButton("Salvar", salvar);
        btnExcluir = new JButton("Excluir", excluir);
        btnCancelar = new JButton("Cancelar", cancelar);
        btnSair = new JButton("Sair", sair);

        btnInserir.addActionListener(this);
        btnSalvar.addActionListener(this);
        btnExcluir.addActionListener(this);
        btnCancelar.addActionListener(this);
        btnSair.addActionListener(this);

        jpButton.add(btnInserir);
        jpButton.add(btnSalvar);
        jpButton.add(btnExcluir);
        jpButton.add(btnCancelar);
        jpButton.add(btnSair);
        this.add(jpButton);
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnInserir) {
            estadoBtn = "INSERIR";
            if (txtNome.getText().trim().equals("")) {
                JOptionPane.showMessageDialog(null, "O Campo nome do Cliente está vazio!!!");
            } else {
                Cliente cli = new Cliente();
                cli.setNome(txtNome.getText().toUpperCase());
                cli.setCpfcnpj(txtCpfCnpj.getText().toUpperCase());
                cli.setRgie(txtRgIe.getText().toUpperCase());
                cli.setEndereco(txtEndereco.getText().toUpperCase());
                cli.setNumero(txtNumero.getText().toUpperCase());
                cli.setBairro(txtBairro.getText().toUpperCase());
                cli.setComplemento(txtComplemento.getText().toUpperCase());
                cli.setCep(txtCep.getText().toUpperCase());
                cli.setCidade(txtCidade.getText().toUpperCase());
                cli.setEstado(txtEstado.getText().toUpperCase());
                cli.setEmail(txtEmail.getText().toLowerCase());
                cli.setTelefone(txtTelefone.getText().toUpperCase());
                cli.setCelular(txtCelular.getText().toUpperCase());
                cli.setSexo(txtSexo.getText().toUpperCase());
                cli.setContato(txtContato.getText().toUpperCase());
                cli.setObs(txtObs.getText().toUpperCase());

                ClienteDao cd = new ClienteDao();
                cd.salvarCliente(cli);

                estadoBtn = "SALVAR";

                controlaBotao();
                limpaDados();
                modelo.addRow(new Object[]{cli.getId(), cli.getNome(), cli.getTelefone()});
            }
        } else if (e.getSource() == btnExcluir) {
            int resp = JOptionPane.showConfirmDialog(null, "Deseja Realmente Excluir o registro ?", "Atencão!", JOptionPane.YES_NO_OPTION);
            if (resp == JOptionPane.YES_OPTION) {
                int cod = (Integer) modelo.getValueAt(tabela.getSelectedRow(), 0);
                cd.excluir(cod);
                ((DefaultTableModel) tabela.getModel()).removeRow(tabela.getSelectedRow());
                limpaDados();
                System.out.println("excluir!");
            } else {
                System.out.println("não excluiu!");
            }
            estadoBtn = "EXCLUIR";
            controlaBotao();
        } else if (e.getSource() == btnCancelar) {
            estadoBtn = "CANCELAR";
            controlaBotao();
        } else if (e.getSource() == btnSair) {
            this.dispose();
            estadoBtn = "SAIR";
            controlaBotao();
        } else if (e.getSource() == btnPesquisa) {
            if (txtPesquisa.getText().trim().equals("")) {
                criaJtable();
            } else {
                JOptionPane.showMessageDialog(null, "Estou passando por aqui.........");
                estadoTB = "PESQUISA";
                criaJtable();
            }
        }
    }

    public void limpaDados() {
        txtNome.setText("");
        txtNome.requestFocus();
        txtBairro.setText("");
        txtCelular.setText("");
        txtCep.setText("");
        txtCidade.setText("");
        txtComplemento.setText("");
        txtContato.setText("");
        txtCpfCnpj.setText("");
        txtEmail.setText("");
        txtEndereco.setText("");
        txtNumero.setText("");
        txtObs.setText("");
        txtRgIe.setText("");
        txtTelefone.setText("");
        txtSexo.setText("");
        txtEstado.setText("");
    }

    public void limpaTabela(JTable tabela, DefaultTableModel modelo) {
        while (tabela.getRowCount() > 0) {
            modelo.removeRow(0);
        }
    }

    public void controlaBotao() {
        if (estadoBtn.equals("INSERIR")) {
            btnExcluir.setEnabled(false);
            btnSair.setEnabled(false);
            btnInserir.setEnabled(false);
            btnSalvar.setEnabled(true);
            btnCancelar.setEnabled(true);
        } else if (estadoBtn.equals("EXCLUIR")) {
            btnExcluir.setEnabled(true);
            btnSair.setEnabled(true);
            btnInserir.setEnabled(false);
            btnSalvar.setEnabled(false);
            btnCancelar.setEnabled(true);
        } else if (estadoBtn.equals("CANCELAR")) {
            btnExcluir.setEnabled(true);
            btnSair.setEnabled(true);
            btnInserir.setEnabled(true);
            btnSalvar.setEnabled(true);
            btnCancelar.setEnabled(false);
        } else if (estadoBtn.equals("SALVAR")) {
            btnExcluir.setEnabled(true);
            btnSair.setEnabled(true);
            btnInserir.setEnabled(true);
            btnSalvar.setEnabled(false);
            btnCancelar.setEnabled(false);
        } else if (estadoBtn.equals("ENTROU")) {
            btnExcluir.setEnabled(true);
            btnSair.setEnabled(true);
            btnInserir.setEnabled(true);
            btnSalvar.setEnabled(false);
            btnCancelar.setEnabled(false);
        }
    }

    public static void main(String[] args) {
        CadastroDeClientes cc = new CadastroDeClientes();
        cc.setVisible(true);

    }
}

Nao use DefaultTableModel, crie um TableModel q estende AbstractTableModel e trabalhe o q precisa. Veja.

// Bean(POJO)
public class Clientes{
     private Long id;
     private String nome;
     private String cpf;
 
     public Clientes(){}
     // set e get
}


// DAO de Clientes
public class ClientesDAO{
       private Connection con;
 
       public ClientesDAO(){
            this.con = ConexaoBD.getConnection();
       }
       
       public List<Clientes> getClientesPorNome(Clientes c){
             // retorna lista de clientes pelo Nome em Like
             List<Clientes> lista = new ArrayList<Clientes>();
             PreparedStatement stm = this.con.prepareStatement("SELECT * FROM clientes WHERE nome LIKE ?");
             stm.setString(1, "%" + c.getNome() + "%"); //aqui manda a clausula pro like ja formatada com %
             ResultSet rs = stm.executeQuery();
             while(rs.next()){
                 Clientes cli = new Clientes();
                 cli.setId(rs.getLong("id"));
                 cli.setNome(rs.getString("nome"));
                 lista.add(cli);
             }
             rs.close();
             stm.close();
             return lista;
       }
}


// TableModel do Cliente
public class ClientesTableModel extends AbstractTableModel{
       private List<Clientes> listaClientes;
       private String[] colunas = {"Id", "Nome", "Cpf"};

       public ClientesTableModel(){
              listaClientes = new ArrayList<Clientes>();
       }

       public ClientesTableModel(List<Clientes> lista){
            this();
            listaClientes.addAll(lista);
       }

       public int getRowCount() {      
        return this.listaClientes.size();  
    }  
  
    @Override  
    public int getColumnCount() {  
        return this.listaClientes.length;  
    }  
  
     public String getColumnName(int column){          
        if(colunas[column] == "Id"){  
            return "Id";  
        }else if(colunas[column] == "Nome"){              
            return "Nome";  
        }else if(colunas[column] == "Cpf"){
            return "Cpf";
        }
        return new String();  
    }  
  
     public Class getColumnClass(int column){           
         if(colunas[column] == "Id"){  
             return Long.class;  
         }else if(colunas[column] == "Nome"){  
            return String.class;  
         }else if(colunas[column] == "Cpf"){
            return String.class;
         }
        return String.class;  
    }  
  
    public Object getValueAt(int rowIndex, int columnIndex) {     
            Clientes c = this.listaClientes.get(rowIndex);  
            switch(columnIndex){  
                case 0: return c.getId();  
                case 1: return c.getNome();                      
                case 2: return c.getCpf();
                default: return new String();  
   }                     
}



// aqui exibir no JFrame por exemplo
public class FrameClientes extends JFrame{
     private ClientesTableModel ctm;
     private JTable tabelaClientes;
     private Clientes c;

     public FrameClientes(){
           c = new Clientes();
           c.setNome("Fer");
           List<Clientes> lista = new ClientesDAO().getClientesPorNome(c);
           ctm = new ClientesTableModel(lista);
           tabelaClientes = new JTable();
           tabelaClientes.setModel(lista);
     }
}

Basta adequar como precisa. Nem testei pq escrevi aqui msm, mas o caminho é esse

t+ e boa sorte