Listar cidades através do estado

Ao selecionar um UF de um combo box a interface deve mostrar no combo box de cidade todas as cidades referentes a esse UF. No meu caso quando eu seleciono um UF pela primeira vez ele mostra todas as cidades, porém ao selecionar outro UF ele apenas adiciona novas cidades mantendo os valores do UF anterior.

Action do UF

 private void tfUfActionPerformed(java.awt.event.ActionEvent evt) {                                     
        // TODO add your handling code here:

        ClientesDAO repositorio = new ClientesDAO();

        String estado = tfUf.getSelectedItem().toString();

        ArrayList<Cidade> estados = repositorio.listarCidadesPorUF(estado);

        for (Cidade estado1 : estados) {
            
            tfCidades.addItem(estado1.getCidade());

        }

    }  

Método de Busca por UF

  public ArrayList<Cidade> listarCidadesPorUF(String estado) {

        try {
            String sql = "select * from cidades where Estado = ?";

            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1, estado);
            ps.execute();

            ResultSet resultado = ps.getResultSet();

            ArrayList<Cidade> cidades = new ArrayList<>();

            while (resultado.next()) {
                Cidade estado1 = new Cidade();
                estado1.setCidade(resultado.getString("cidade"));
                estado1.setEstado(resultado.getString("estado"));
                cidades.add(estado1);
            

            }

            return cidades;

        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, "Excpetion -> " + e);

            return null;
        }
    }

Estás sempre a adicionar items sem limpar a combo box.

tfCidades.removeAllItems();

ArrayList<Cidade> estados = repositorio.listarCidadesPorUF(estado); 

for (Cidade estado1 : estados) { 
    tfCidades.addItem(estado1.getCidade()); 
}
1 curtida