Problema no retorno de uma busca

7 respostas
R

Olá boa noite.
Estou com um problema que olho e olho e não consigo entender o porque.
Faço uma consulta no banco de dados e preencho um list com o resultado, com esse list eu tenho colocar cada valor em seu respectivo campo no form.
O problema é o seguinte quando eu peço para executar o sistema traz os dados certinho quando os mostro em System.out.println, mais quando peço para preencher os jtextfield ele não dá nenhum erro, mais tambem nao preenche nenhum deles. Apenas lembrando que os sout e os jtextfield.setText estao no mesmo metodo.
Segue o método:

protected void mostrarClientes(List<ClienteBean> clientes) {
        for (int i = 0; i < clientes.size(); i++) {
            txtCodigo.setText("" + clientes.get(i).getCodigo());
            txtDataCadastro.setText("" + clientes.get(i).getDataCadastro());
            txtNome.setText("" + clientes.get(i).getNome());
            System.out.println(""+ clientes.get(i).getCodigo());
            System.out.println(""+ clientes.get(i).getDataCadastro());
            System.out.println(""+ clientes.get(i).getNome());
        }
    }

Porque está acontecendo isso? Alguém pode me ajudar por favor.
Obrigado!

7 Respostas

K

já tentou usar o foreach?

for(ClienteBean c : listaCliente){
 txtCodigo.setText(c.getCodigo().toString());
.
.
.
}
rafadelnero

protected void mostrarClientes(List<ClienteBean> clientes) { for (int i = 0; i < clientes.size(); i++) { txtCodigo.setText("" + clientes.get(i).getCodigo()); txtDataCadastro.setText("" + clientes.get(i).getDataCadastro()); txtNome.setText("" + clientes.get(i).getNome()); System.out.println(""+ clientes.get(i).getCodigo()); System.out.println(""+ clientes.get(i).getDataCadastro()); System.out.println(""+ clientes.get(i).getNome()); } }

Você está chamando esse método por um evento ao clicar de algum botão?Tente colocar uma String qualquer pra ver se os valores ficam no JTextField.E certifique-se de que esse método esteja sendo invocado.

R

Boa noite, infelizmente continuo com o problema. Já havia tentado foreach, e não funcionou também. Quanto a estar invocando o método, acredito que eu esteja sim, pois coloquei os system.out para teste no metodo e o resultado é mostrado no console. Não estou conseguindo encontrar a solução. Vou colocar o outro método onde chamo este.
Tenho dois forms onde um é o de cadastro e o outro é o de pesquisa. Invoco esse método no duplo clique da jtable no outro form. Mais ou menos assim.

private void tablePesquisaMouseClicked(java.awt.event.MouseEvent evt) {                                           
        if (evt.getClickCount() == 2) {
             CadastroCliente cadastro = new CadastroCliente();
             cadastro.listarPesquisa(this.retornaSelecao());
             this.dispose();
        }
        
    }

Esse metodo pega a codigo da da coluna codigo da tabela, para eu saber qual o codigo de cliente devo colocar na consulta sql.
O metodo de retorno do codigo é seguinte.:

public int retornaSelecao() {
        return (int) tablePesquisa.getValueAt(tablePesquisa.getSelectedRow(), 0);
    }

O metodo mouseclicked chama o metodo listar que esta no form de cadastro, que é seguinte.:

public void listarPesquisa(int codigo) {
        ClienteControl cli = new ClienteControl();
        clientes = cli.listar("" + codigo, 2);
        mostrarClientes(clientes);
    }

E este por sua vez chama o mostrar clientes que deveria exibir os valores nos campos.

protected void mostrarClientes(List<ClienteBean> clientes) {
        /*
        for (int i = 0; i < clientes.size(); i++) {
            txtCodigo.setText("" + clientes.get(i).getCodigo());
            txtDataCadastro.setText("" + clientes.get(i).getDataCadastro());
            txtNome.setText("" + clientes.get(i).getNome());
            System.out.println(""+ clientes.get(i).getCodigo());
            System.out.println(""+ clientes.get(i).getDataCadastro());
            System.out.println(""+ clientes.get(i).getNome());
        }
}

e o metodo listar pesquisa chama o metodo listar que esta na classe dao.

public List<ClienteBean> listar(String consulta) {
        List<ClienteBean> clientes = new ArrayList();
        pstm = bd.conectar().prepareStatement(consultaClienteCodigo);
        pstm.setInt(1, Integer.parseInt(consulta));
        rst = pstm.executeQuery();
            ClienteBean cli;
            while (rst.next()) {
                cli = new ClienteBean();
                cli.setCodigo(rst.getInt("codigo"));
                cli.setDataCadastro(rst.getDate("datcad"));
                cli.setDataCadastro(rst.getDate("nascli"));
                cli.setPessoa(rst.getString("tippessoa"));
                cli.setNome(rst.getString("nome"));
                cli.setApelido(rst.getString("apelido"));
                .
                .
                .
                clientes.add(cli);
             }
         return clientes;
}

Estou fazendo algo errado?
Muito Obrigado!

Nelsonjahn

Éssa busca é do banco de Dados?

R

Sim, é do banco de dados. aí esta todo o processo. Ainda nao consegui enecontrar a solucao sendo que os resultados aparecem certinho quando coloco o system.our. apenas para teste, e eles sao executados, mais esses mesmos valores nao sao preenchidos no jtextfield.
Sugestões?
Obrigado!

Nelsonjahn

Caro amigo não sei como voce faz a conexão com o banco mas eu coloco meus dados do banco nos TextFields, da seguinte forma
Abaixo Veja!

public void mostrar_dados(){
        try 
           {             
            tf_codigonf.setText(con_nfvenda.resultset.getString("codigonf")); 
            tf_datavenda.setText(con_nfvenda.resultset.getString("datavenda")); 
            tf_codcliente.setText(con_nfvenda.resultset.getString("codcliente")); 
            tf_valorTotalProduto.setText(con_nfvenda.resultset.getString("totalnf"));      
            tf_obs.setText(con_nfvenda.resultset.getString("observacao"));                       
                              
           }
       catch(SQLException erro){ 
                      
           }
    }

depois chama o mostrar_dados(); aonde quer que ele atualiza, mas observando a conexão de banco!

R

Boa Noite.
Desse jeito que o NelsonJah postou realmente funciona, mais minha duvida continua, porque os jtextfield não são preenchidos?
Fiz um teste, coloquei uma String normal mesmo, com as aspas e um texto normal dentro, e mesmo assim eles não são mostrados na tela? A questão pelo que percebi não esta na passagem dos dados, pois estes estão funcionando normalmente após testes que fiz.
O que faz os jtextfield não apresentarem os dados?
Vou postar o código que fiz o teste e mesmo assim não apresentou os dados.:

protected void ApresentaGrupos(List<GrupoBean> grupos) {
String codigo = "";
        String grupo = "";
        for (GrupoBean g : grupos) {
            codigo = g.getCodigo().toString().trim();
            grupo = g.getGrupo();

            System.out.println("" + g.getCodigo().toString().trim()); // TESTE
            System.out.println("" + g.getGrupo().toUpperCase()); // TESTE
        }
        this.habilitaCampos();
        txtCodigo.setText("TEXTO DE TESTE"); // nem esse valor foi setado no campo
        txtGrupo.setText(grupo);
        System.out.println("teste" + codigo);
        System.out.println("teste" + grupo);

Muito estranho! Não encontro uma razão. Alguma ideia pessoal?
Obrigado!

Criado 18 de janeiro de 2013
Ultima resposta 24 de jan. de 2013
Respostas 7
Participantes 4