JComboBox, Estados e Cidades, não limpa os campos

Olá a todos.
Venho mais uma vez pedir ajuda em uma questão que já pesquisei, mas não encontrei uma solução para isso.
Tenho duas Jcombobox (estado, cidade), onde as duas estão funcionando perfeitamente, quando clico na Jcombobox Estado, já habilita na Jcombobox Cidade, as cidades correspondentes a esse estado. Tenho duas tabelas no banco de dados, ambas com a relação dos estados e cidades. O cadastro de clientes em que essas Jcombobox estão, já está funcionando e salvando os dados no banco. Eu uso o PostgreSql e Netbeans para criar o projeto.
O problema que notei é que, ao trabalhar com a opção do cliente (salvar novo ou editar), os Jcombobox do Estado e Cidade ficam com as opções selecionadas anteriormente, não limpam os campos. E ao iniciar a tela já aparece a primeira sigla do primeiro Estado (AC) e a primeira cidade desse Estado.

Então, gostaria que ao iniciar a tela, apareça a palavra “Selecione” no lugar da sigla e cidade inicial. E que ao limpar os campos, voltasse a aparecer a palavra “Selecione” novamente, no lugar da sigla do estado e cidade selecionada anteriormente.

EstadoDAO.java

public List<TabelaEstado> listarEstado(String sql) {
        List<TabelaEstado> lista = new ArrayList<>();
        conecta.conexao();
        try {            
            PreparedStatement pst = conecta.con.prepareStatement(sql);
            ResultSet rs = pst.executeQuery();
            if (rs != null) {
                while (rs.next()) {
                    TabelaEstado te = new TabelaEstado();
                    te.setId(rs.getInt(1));
                    te.setNome(rs.getString(2));
                    te.setUf(rs.getString(3));
                    lista.add(te);
                }
            }
            return lista;
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        conecta.desconecta();
        return null;        
    }

CidadeDAO.java

public List<TabelaCidade> listarCidade(String sql) {
        List<TabelaCidade> lista = new ArrayList<>();
        conecta.conexao();
        try {            
            PreparedStatement pst = conecta.con.prepareStatement(sql);
            ResultSet rs = pst.executeQuery();
            if (rs != null) {
                while (rs.next()) {
                    TabelaCidade tc = new TabelaCidade();
                    tc.setId(rs.getInt(1));
                    tc.setNome(rs.getString(2));
                    tc.setEstado(rs.getInt(3));
                    lista.add(tc);
                }
            }
            return lista;
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        conecta.desconecta();
        return null;        
    }

TabelaEstado.java

public DefaultComboBoxModel listarEstado() {
        TabelaEstadoDAO tedao = new TabelaEstadoDAO();
        String sql = "SELECT * FROM estado ORDER BY uf";
        DefaultComboBoxModel modelo = new DefaultComboBoxModel();
        List<TabelaEstado> lista = new ArrayList<>();
        try {
            modelo.removeAllElements();
            lista = tedao.listarEstado(sql);
            for(TabelaEstado te : lista){
                modelo.addElement(te.getUf());
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro ao listar Estados.\nErro: " + ex);
            modelo.removeAllElements();
        }
        return modelo;
    }

TabelaCidade.java

public DefaultComboBoxModel listarCidade(String estado) {
        TabelaCidadeDAO tcdao = new TabelaCidadeDAO();
        String sql = "SELECT c.id, c.nome, c.estado FROM cidade c, estado e WHERE c.estado = e.id AND e.uf = '" + estado + "' ORDER BY c.nome";
        DefaultComboBoxModel modelo = new DefaultComboBoxModel();
        List<TabelaCidade> lista = new ArrayList<>();        
        try {
            modelo.removeAllElements();
            lista = tcdao.listarCidade(sql);
            for (TabelaCidade tc : lista) {
                modelo.addElement(tc.getNome());
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, "Erro ao listar Cidades.\nErro: " + ex);
            modelo.removeAllElements();
        }
        return modelo;
    }

Alguém poderia me auxiliar nessa dúvida?

Antes de alimentar seu ComboBox, ou seja, antes de fazer o loop adicionando os elementos, vc deve adicionar um elemento com o texto “Selecione…”. E na ação de clique do LimparCampos vc deve definir o index dele para 0, assim ele volta para o primeiro elemento que é o “Selecione…”.

Obrigado por responder PauloAugusto.
Poderia só me informar onde faço essa inclusão, já tentei vários, mas sem sucesso.
Desculpa o incomodo, mas não consegui…

Por nada hehe
Sem problemas…
Tente colocar o seu código dessa maneira e replique essa mudança na TabelaEstado também:

        try {
            modelo.removeAllElements();
            lista = tcdao.listarCidade(sql);
            modelo.addElement("Selecione...");
            for (TabelaCidade tc : lista) {
                modelo.addElement(tc.getNome());
            }
        }

E no seu código de limpar, vc vai adicionar a seguinte linha:

modelo.setSelectedIndex(0);

Te aconselho também a fechar o PreparedStatement e o ResultSet no DAO. Se deixá-los aberto pode consumir muita memória e isso pode trazer erros ao seu sistema.
Você pode fechá-los explícitamente:

    PreparedStatement pst = null;
    ResultSet rs = null;
    try {            
        pst = conecta.con.prepareStatement(sql);
        rs = pst.executeQuery();
        if (rs != null) {
            while (rs.next()) {
                TabelaCidade tc = new TabelaCidade();
                tc.setId(rs.getInt(1));
                tc.setNome(rs.getString(2));
                tc.setEstado(rs.getInt(3));
                lista.add(tc);
            }
        }
        return lista;
    } catch (SQLException ex) {
        ex.printStackTrace();
    } finally {
        if (pst != null)
            pst.close();

        if (rs != null)
            rs.close();
    }
    conecta.desconecta();
    return null;   

Ou também dessa forma:

    try (PreparedStatement pst = conecta.con.prepareStatement(sql);
        ResultSet rs = pst.executeQuery()) {            
        while (rs.next()) {
            TabelaCidade tc = new TabelaCidade();
            tc.setId(rs.getInt(1));
            tc.setNome(rs.getString(2));
            tc.setEstado(rs.getInt(3));
            lista.add(tc);
        }
        return lista;
    } catch (SQLException ex) {
        ex.printStackTrace();
    }

Te aconselho a utilizar a última, pois o bloco try já se encarrega de fechar os elementos.

Agora funcionou, eu estava colocando os códigos no local errado.
E quanto ao que você falou a respeito de fechar o PreparedStatement e o ResultSet no DAO, eu fecho quando fecho a conexão.

}
conecta.desconecta();
return null;
}

Obrigado pela ajuda.