Fórum Listar dados gravados em um banco de dados em um JTextField #500403

06/11/2014

0

Boa tarde estou com uma dúvida com relação a listar os dados que gravei em um banco de dados para um JTextField, criei uma tela, com o campo para o usuário digitar o ID do cadastro no banco e um botão FILTRAR, eu quero que quando clique em filtrar, apareça os dados daquele ID nos JTextField que criei. Segue o Código do botão filtrar e o código de listar do banco.

Filtrar:

JButton btnFiltrar = new JButton("Filtrar");
	btnFiltrar.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			GerenciaAgenda ga = new GerenciaAgenda();
			Agenda a = new Agenda();
			a.setId(Integer.parseInt(txtID.getText()));
			ga.selecionar(a.getId());
			txtNome.setText(a.getNome());
			txtEmail.setText(a.getEmail());
			txtCpf.setText(a.getCpf());
		}
	});


Listar BD:

public Agenda selecionar(int id){
        Connection c = new Conexao().criarConexao();
        String sql = "SELECT * FROM agenda WHERE id=?";
        try {
            PreparedStatement p = c.prepareStatement(sql);
            p.setInt(1, id);
    
            ResultSet resultado = p.executeQuery();
            
            if (resultado.next()){
                Agenda a = new Agenda();
                a.setId(id);
                a.setNome( resultado.getString("nome"));
                a.setEmail(  resultado.getString("email"));
                a.setCpf( resultado.getString("cpf"));
                return a;
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(GerenciaAgenda.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            new Conexao().fecharConexao(c);    
        }
        return null;
    }


Podem me ajudar ? Agradeço desde já, Abraços
Syclus Ltda

Syclus Ltda

Responder

Post mais votado

07/11/2014

Boa tarde estou com uma dúvida com relação a listar os dados que gravei em um banco de dados para um JTextField, criei uma tela, com o campo para o usuário digitar o ID do cadastro no banco e um botão FILTRAR, eu quero que quando clique em filtrar, apareça os dados daquele ID nos JTextField que criei. Segue o Código do botão filtrar e o código de listar do banco.

Filtrar:

JButton btnFiltrar = new JButton("Filtrar");
	btnFiltrar.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			GerenciaAgenda ga = new GerenciaAgenda();
			Agenda a = new Agenda();
			a.setId(Integer.parseInt(txtID.getText()));
			ga.selecionar(a.getId());
			txtNome.setText(a.getNome());
			txtEmail.setText(a.getEmail());
			txtCpf.setText(a.getCpf());
		}
	});


Listar BD:

public Agenda selecionar(int id){
        Connection c = new Conexao().criarConexao();
        String sql = "SELECT * FROM agenda WHERE id=?";
        try {
            PreparedStatement p = c.prepareStatement(sql);
            p.setInt(1, id);
    
            ResultSet resultado = p.executeQuery();
            
            if (resultado.next()){
                Agenda a = new Agenda();
                a.setId(id);
                a.setNome( resultado.getString("nome"));
                a.setEmail(  resultado.getString("email"));
                a.setCpf( resultado.getString("cpf"));
                return a;
            }
            
        } catch (SQLException ex) {
            Logger.getLogger(GerenciaAgenda.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            new Conexao().fecharConexao(c);    
        }
        return null;
    }


Podem me ajudar ? Agradeço desde já, Abraços


Seu código está quase certo, só que faltou você atribuir o retorno do método selecionar() para o objeto agenda, faça assim:

a = ga.selecionar(a.getId());


Sem isso, os dados o objeto retornado não serão populados.

Ronaldo Lanhellas

Ronaldo Lanhellas
Responder

Gostei + 1

Mais Posts

07/11/2014

Syclus Ltda

Obrigado Ronaldo, foi isso mesmo que faltava.

Agora estou com uma dúvida chata e já pesquisei em tudo que é lugar e não consigo fazer funcionar, no meu programa quando eu clico em "ADICIONAR" o programa abre uma tela para inserir os dados e eu tenho 2 botões, 1 - SALVAR 2 - CANCELAR, eu queria que quando o usuário clicasse em salvar essa tela se fechasse deixando a tela principal aberta, e também ao clicar em cancelar somente a tela de cadastro de fechasse, já tentei chamar o this.dispose(); o this.setVisible(false); e nada acontece a tela continua aberta, tendo que fechar no X na tela, poderia me ajudar ?

Código do Botão SALVAR:

JButton btnSalvar = new JButton("Salvar");
		btnSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				GerenciaAgenda ga = new GerenciaAgenda();
	         	Agenda a = new Agenda();
	        	a.setNome(txtNome.getText());
	        	a.setEmail(txtEmail.getText());
	        	a.setCpf(txtCpf.getText());
	        	ga.inserir(a);
	        	JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso!");
			}
		});


Código para chamar a tela ADICIONAR:

JButton btnAdicionar = new JButton("Adicionar");
		btnAdicionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				AdicionarFrame chamaCad = new AdicionarFrame();
				chamaCad.setVisible(true);
			}
		});
		btnAdicionar.setToolTipText("Cadastrar cliente.");
		btnAdicionar.setBounds(130, 0, 169, 23);
		add(btnAdicionar);


No caso eu tenho um JPanel chamado TELA que tem os botões de adicionar, remover etc. e ao clicar em adicionar o sistema chama o AdicionarFrame que é um JFrame com os dados para o usuário inserir. Como que eu faço para somente a tela de cadastro fechar ao clicar em SALVAR ?

Abraços
Responder

Gostei + 0

07/11/2014

Ronaldo Lanhellas

Poste o código da sua classe AdicionarFrame
Responder

Gostei + 0

07/11/2014

Syclus Ltda

public class AdicionarFrame extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					AdicionarFrame frame = new AdicionarFrame();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public AdicionarFrame() {
		setTitle("Adicionar");
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
		
		JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
		tabbedPane.addTab("Adicionar", new Adicionar());
		contentPane.add(tabbedPane, BorderLayout.CENTER);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
	}

}


Acho que descobri o que está acontecendo, mas se for isso mesmo, vou ter que fazer as classes todas, eu estou criando um JPanel e criando os JTextField e JButton nesse JPanel, após isso eu estou criando um JFrame e dentro dele jogando um JTabbedPane e criando o JPanel dentro desse JTabbedPane.

Eu fiz um teste a pouco, criei um JFrame direto, adicionei os JTextField e JButton, e coloquei no listener do JButto:n nomedaframe.this.dispose(); e funcionou.


Segue o código:

public class Sobre extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					Sobre frame = new Sobre();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public Sobre() {
		setTitle("Sobre");
		setResizable(false);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JLabel lblSobre = new JLabel("Informa\u00E7\u00F5es do Aluno Desenvolvedor do Projeto");
		lblSobre.setFont(new Font("Tahoma", Font.BOLD, 14));
		lblSobre.setBounds(43, 11, 338, 14);
		contentPane.add(lblSobre);
		
		JTextArea txtrAluno = new JTextArea();
		txtrAluno.setFont(new Font("Times New Roman", Font.PLAIN, 15));
		txtrAluno.setBackground(Color.ORANGE);
		txtrAluno.setEditable(false);
		txtrAluno.setText("Aluno: Newton Duarte Cavalcanti\r\nE-Mail: newton_@hotmail.com\r\nFaculdade de Alagoas - Est\u00E1cio FAL\r\n\r\n07 de Novembro de 2014\r\nMacei\u00F3/AL\r\nTodos os Direitos Reservados");
		txtrAluno.setBounds(10, 70, 414, 130);
		contentPane.add(txtrAluno);
		
		JButton btnOk = new JButton("OK");
		btnOk.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Sobre.this.dispose();
			}
		});
		btnOk.setBounds(335, 212, 89, 23);
		contentPane.add(btnOk);
	}
}
Responder

Gostei + 0

07/11/2014

Ronaldo Lanhellas

Bom, você postou a classe AdicionarFrame mas não vi nenhum botão de Salvar ou Cancelar nela, tem certeza que colocou tudo ?
Responder

Gostei + 0

11/11/2014

Syclus Ltda

Opa Ronaldo, desculpe por não ter respondido logo, mas eu descobri o que estava acontecendo, foi o que eu falei mesmo, eu estava criando um JPanel e nesse JPanel criando os botões e os listener dos botões, e depois estava criando um JFrame e dentro do JFrame chamando o JPanel e estava dando problemas por causa disso.

Eu refiz o projeto inteiro esse fim de semana, e está perfeito, consegui fazer a janela fechar com o frame.this.dispose();

Obrigado pela atenção, abraços!
Responder

Gostei + 0

11/11/2014

Ronaldo Lanhellas

Opa Ronaldo, desculpe por não ter respondido logo, mas eu descobri o que estava acontecendo, foi o que eu falei mesmo, eu estava criando um JPanel e nesse JPanel criando os botões e os listener dos botões, e depois estava criando um JFrame e dentro do JFrame chamando o JPanel e estava dando problemas por causa disso.

Eu refiz o projeto inteiro esse fim de semana, e está perfeito, consegui fazer a janela fechar com o frame.this.dispose();

Obrigado pela atenção, abraços!


Sem problemas. boa sorte no projeto.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar