Não consigo exibir uma String em um JTextField

8 respostas
java
F

Boa Tarde,

Sou iniciante em java e estou tentando criar uma aplicação para cadastro de clientes usando a IDE NetBeans. Através de pesquisas, consegui criar o cadastro de clientes e o método para consultar o mesmo, porém, ao tentar exibir o retorno da consulta em alguns JTextFields na classe que contem o botão de Consulta, o valor capturado retorna como nulo. Já tentei varias maneiras de corrigir isso, porém não obtive sucesso. Gostaria de uma ajuda:

Segue Código:

Class Cliente

public class Cliente {

    private int id;
    private String nome;
    private String cpf;
    private String endereco;
    private String numero;
    private String complemento;
    private String telefone;
    private String celular;
    
  
    public Cliente() { 
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome ;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
        
    public String getCpf() {
    return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }
    
    public String getEndereco() {
    return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
    
    public  String getNumero() {
    return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }
    
    public String getComplemento() {
    return complemento;
    }

    public void setComplemento(String complemento) {
        this.complemento = complemento;
    }
    
    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    public String getCelular() {
        return celular;
    }

    public void setCelular(String celular) {
        this.celular = celular;
    }
     
}``

Classe ClienteDao

public class ClienteDao {

private final String LISTBYID = "SELECT * FROM cliente WHERE ID=?";

...

public Cliente getClienteById(int id) {
		Connection conn = null;
		PreparedStatement pstm = null;
		ResultSet rs = null;
		Cliente cliente = new Cliente();
                
		try {
			conn = FabricaConexao.getConexao();
			pstm = conn.prepareStatement(LISTBYID);
			pstm.setInt(1, id);
			rs = pstm.executeQuery();
                        
			while (rs.next()) {
				cliente.setId(rs.getInt("id"));
				cliente.setNome(rs.getString("nome"));
                                cliente.setCpf(rs.getString("cpf"));
                                cliente.setEndereco(rs.getString("endereco"));
                                cliente.setNumero(rs.getString("numero"));
                                cliente.setComplemento(rs.getString("complemento"));
				cliente.setTelefone(rs.getString("telefone"));
				cliente.setCelular(rs.getString("celular"));
                             
                                    
			}
			FabricaConexao.fechaConexao(conn, pstm, rs);
		} catch (ClassNotFoundException | SQLException e) {
			JOptionPane.showMessageDialog(null, "ERRO CONSULTA " + e.getMessage());
		}
		return cliente;
	}
}

Até aqui ele funciona corretamente, consegue efetuar a consulta no banco de dados e armazenar os valores nas variáveis. O problema é na hora de exibir no JTextField.

Tela com os JTextFields

public class TelaCadastroClienteInternalFrame extends javax.swing.JInternalFrame {

    /**
     * Creates new form TelaCadastroClienteInternalFrame
     */
    public TelaCadastroClienteInternalFrame() {
        initComponents();

...

}

private void btnConsultarClienteActionPerformed(java.awt.event.ActionEvent evt) {                                                    
        
        Cliente cliente = new Cliente();
        ClienteDao clientedao = new ClienteDao();
        clientedao.getClienteById(Integer.parseInt(txtIdCliente.getText()));
        
        
        txtIdCliente.setText(Integer.toString(cliente.getId()));
        txtNomeCliente.setText(cliente.getNome());     
        txtCpfCliente.setText(cliente.getCpf());
        txtEnderecoCliente.setText(cliente.getEndereco());
        txtNumeroCliente.setText(cliente.getNumero());
        txtComplCliente.setText(cliente.getComplemento());
        txtTelefoneCliente.setText(cliente.getTelefone());
        txtCelularCliente.setText(cliente.getCelular()); 
        
    }                                          
}

8 Respostas

M

Converta o ID em String utilizando o método String.valueOf();

txtIdCliente.setText(String.valueOf(cliente.getId()));

F

Ainda não funcionou … ele retornar o ID no JTextfield com o valor 0 e não preenche os outros campos.

L

Tenta modificar os campos da interface sem buscar nada no banco de dados. Faz só assim:

private void btnConsultarClienteActionPerformed(java.awt.event.ActionEvent evt) {
    txtIdCliente.setText("id");
    txtNomeCliente.setText("nome");     
    txtCpfCliente.setText("cpf");
}

E vê se funciona (tenho quase certeza que não vai funcionar). Se não funcionar, o problema não é nesse método, mas sim na configuração da interface. Tente ver qual o nome da referência de cada campo, se realmente o campo de Id é referenciado pela variável txtIdCliente, se o campo de nome é referenciado por txtNomeCliente, e assim por diante.

Se funcionar avisa que a gente tenta diagnosticar de outra forma.

M

Ahh, agora saquei seu problema.

Seu método getClienteById() retorna um Cliente, no entanto, você não está armazenando este Objeto retornado em lugar nenhum.

Faça assim:

ClienteDao clientedao = new ClienteDao();
Cliente cliente = clientedao.getClienteById(Integer.parseInt(txtIdCliente.getText()));

Agora deve funcionar normalmente.

F

Cara … eu criei uma classe ClienteTeste com as mesmas variareis de Clientes só que com strings fixas e deu certo … agora eu não consigo identificar o motivo pelo qual ele não consegue trazer as variáveis carregadas do banco de dados na classe Cliente.

F

CAra … realmente essa alteração possibilitou que eu conseguisse pegar as variaveis da classe Cliente para a Tela , porém, mesmo setando o texto para o JTextField, ainda não consigo carrega-las nos campos.

Resumindo…

No codigo abaixo eu consigo imprimir os valores no System.out.println, mas quando tento passar o conteudo para dentro do JtextField, ele continua não exibindo.

private void btnConsultarClienteActionPerformed(java.awt.event.ActionEvent evt) {                                                    
        
        //Cliente cliente = new Cliente();
        //ClienteTeste cliente = new ClienteTeste();
        ClienteDao clientedao = new ClienteDao();
        Cliente cliente = clientedao.getClienteById(Integer.parseInt(txtIdCliente.getText()));
        
        int id = cliente.getId();
        String nome = cliente.getNome();
        String cpf = cliente.getCpf();
        String endereco = cliente.getEndereco();
        String numero = cliente.getNumero();
        String complemento = cliente.getComplemento();
        String telefone = cliente.getTelefone();
        String celular = cliente.getCelular();
        
        System.out.println(id);
        System.out.println(nome);
        System.out.println(cpf);
        System.out.println(endereco);
        System.out.println(numero);
        System.out.println(complemento);
        System.out.println(telefone);
        System.out.println(celular);
        
        //txtIdCliente.setText(String.valueOf(id)));
        txtNomeCliente.setText(nome);     
        txtCpfCliente.setText(cpf);
        txtEnderecoCliente.setText(endereco);
        txtNumeroCliente.setText(numero);
        txtComplCliente.setText(complemento);
        txtTelefoneCliente.setText(telefone);
        txtCelularCliente.setText(celular); 
        
    }
L

Estava olhando aqui na documentação do setText e vi que o método não gera um evento na interface. Isso me fez pensar que talvez você tenha que ativar manualmente um evento para “repintar” os campos na tela. Porém, você disse que o campo ID tá sendo preenchido com o 0, né? Essa linha tá funcionando mesmo?

txtIdCliente.setText(String.valueOf(id)));

Se tá funcionando, então o problema não é no setText, mas como disse antes, nas referências das variáveis dos campos de texto.

Quer fazer um teste pra ver? Digita algo em todos os campos (de preferência "cpf" no campo de cpf, "endereço" no de endereço, e etc), e clica no botão que chama teu método ali. Dentro do método, você vai fazer o seguinte:

System.out.println("Nome: " + txtNomeCliente.getText());
// mesma coisa pros outros campos

Vê se aparece no terminal o texto que você digitou nos campos.

F

Ivbarbosa,

O get do textfield funciona, eu consigo capturar os valores, coloca-los no banco de dado … e quando uso a consulta , consigo pegar os valores dentro do banco , coloca-los nas variaveis da classe cliente e printa-las na tela … só não consigo fazer com que apareçam dentro do JTextField …

private void btnConsultarClienteActionPerformed(java.awt.event.ActionEvent evt) {
ClienteDao clientedao = new ClienteDao();
    Cliente cliente = clientedao.getClienteById(Integer.parseInt(txtIdCliente.getText()));
    
    
    String nome = cliente.getNome();
    txtNomeCliente.setText(nome);
    String cpf = cliente.getCpf();
    String endereco = cliente.getEndereco();
    String numero = cliente.getNumero();
    String complemento = cliente.getComplemento();
    String telefone = cliente.getTelefone();
    String celular = cliente.getCelular();
    
    
    System.out.println(nome);
    System.out.println(cpf);
    System.out.println(endereco);
    System.out.println(numero);
    System.out.println(complemento);
    System.out.println(telefone);
    System.out.println(celular);
    //Até aqui funciona
    
    txtNomeCliente.setText(nome);
    txtCpfCliente.setText(cpf);
    txtEnderecoCliente.setText(endereco);
    txtNumeroCliente.setText(numero);
    txtComplCliente.setText(complemento);
    txtTelefoneCliente.setText(telefone);
    txtCelularCliente.setText(celular);
   //Aqui que não exibe de volta no textfield
Criado 31 de janeiro de 2017
Ultima resposta 17 de mar. de 2017
Respostas 8
Participantes 3