Problemas com JTextField

3 respostas
silva.fernandes

Alguem pode me ajudar ?

To fazendo um negocio bem bestinha mas engasguei num negocio.

:arrow:Tenho uma classe chamada MPrincipal onde estão meus JTextField.

:arrow:Tenho outra classe chamada BuscarNome onde faço o acesso ao BD.

A situação é o seguinte: Qdo clico no botão Search para ele buscar no BD e trazer para meus JTextField não aparece nada neles.

Porque será ? será q não estou sabendo instanciar esses objetos, pois se ao invés d eu usar a classe BuscarNome … criar um método dentro de MPrincipal, tudo funciona …

Classe MPrincipal

package fabiano.com;


import java.awt.Rectangle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.JLabel;

public class MPrincipal {


	public JTextField getJtfName() {
			if (jtfName == null) {
			jtfName = new JTextField();
			jtfName.setBounds(new Rectangle(101, 62, 144, 20));
		
		}
		return jtfName;
	}

	public JTextField getJtfLastName() {
		if (jtfLastName == null) {
			jtfLastName = new JTextField();
			jtfLastName.setBounds(new Rectangle(100, 92, 144, 20));
		}
		return jtfLastName;
	}

	private JButton getJbtExecutar() {
		if (jbtExecutar == null) {
			jbtExecutar = new JButton();
			jbtExecutar.setBounds(new Rectangle(156, 131, 85, 26));
			jbtExecutar.setText("Search");
			jbtExecutar.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					BuscarNome nome = new BucarNome();
					nome.start();
					
				}
			});
		}
		return jbtExecutar;
	}

Classe BuscarNome

package fabiano.com;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class BuscarNome extends Thread{
	
	private Connection con = null;
	private MPrincipal jtf;
	
	BuscarNome(){
				
		try{
			Class.forName("org.firebirdsql.jdbc.FBDriver");
			con = DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:/DATABASE.GDB","SYSDBA","masterkey");			
		
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT NAME, LASTNAME " +
											"FROM USER " +
											"WHERE NAME = 'User' AND LASTNAME = 'User'");
			while(rs.next()){
				jtf.getJtfName().setText(rs.getString(1));
				jtf.getJtfLastName().setText(rs.getString(2));
				System.out.println("Acessado no Banco " + rs.getString(1));
				System.out.println("Acessado no Banco " + rs.getString(2));
			}
			
			rs.close();
			con.close();
			
		}catch(Exception ex){
			ex.printStackTrace();
		}
		
	}

}

Será q alguem pode dar uma luz ?

3 Respostas

andgonca

Do ponto de vista OO, pelo que eu entendi, as coisas tão meio bagunçadas… :smiley:

Seguinte: colocando referências aos texts da classe MPrincipal dentro da classe BuscaNome (que só deveria trazer os nomes), você está provocando um acoplamento desnecessário entre as duas classes.

Talvez você devesse pensar em um método para a classe BuscarNome que retorne uma Collection, array ou algo parecido e efetuar as atribuições aos texts na classe MPrincipal, entendeu? Dessa forma, vc poderia utilizar a classe BuscarNome para prover os nomes para diversas outras classes, sem ficar preso a MPrincipal.

Outra dica: isole a conexão com o banco de dados em uma outra classe, especializada em efetuar esse trabalho. Senão vc vai ter que escrever esse trecho de código em todas as classes que fizerem acesso a banco.

[]s

silva.fernandes

Entendi oq vc quis dizer …

Valewww pelas dicas

M

rapaz… eu acho que os nomes não estão aparecendo nos JtextField’s pq vc tá colocando os índices errados nos seguintes códigos:

jtf.getJtfName().setText(rs.getString(1));
jtf.getJtfLastName().setText(rs.getString(2));

deveria estar assim:

jtf.getJtfName().setText(rs.getString(0));
jtf.getJtfLastName().setText(rs.getString(1));

Pois em java, a maioria das estruturas de dados começam com índice 0.

Tenta ai pra ver se é isso!

[]'s

Criado 4 de outubro de 2006
Ultima resposta 4 de out. de 2006
Respostas 3
Participantes 3