JTextField dentro de metodo get

Caros colegas, estou com um problema que não estou conseguindo pegar o texto de um JTextField. Esse JTextField está dentro de um método get. Esse método get, desenha um painél de cadastro de Cliente e esse painél é colocado dentro de um JFrame.
Por exemplo, estou em outra classe e quero pegar o texto de um JTextField que está dentro de um método get de uma outra classe. Então, eu crio um objeto da classe qeu tem o método get e consigo referenciar o método get, mas não consigo referenciar os JTextField existentes dentro desse método. Segue o código do meu método get. Lembrando que estou em outra classe e quero pegar textos dos JTextFields dessa classe…Um abraço a todos!!!

[code]public class PaineisCadastro {

private JPanel cliente

public JPanel getCliente() {

	cliente = new JPanel();
	cliente.setLayout(null);
	
	JLabel nomeCliente = new JLabel("Nome");
	nomeCliente.setBounds(new Rectangle(29, 14, 47, 20));
	
	JLabel cpfCliente = new JLabel("CPF");
	cpfCliente.setBounds(new Rectangle(332, 14, 37, 20));
	
	JLabel foneCliente = new JLabel("Telefone");
	foneCliente.setBounds(new Rectangle(30, 60, 55, 20));
	
	JLabel emailCliente = new JLabel("E-mail");
	emailCliente.setBounds(new Rectangle(165, 60, 46, 20));
	
	JLabel endCliente = new JLabel("Endereço");
	endCliente.setBounds(new Rectangle(30, 105, 60, 20));
	 
	JTextField tNomeCliente = new JTextField();
	tNomeCliente.setBounds(new Rectangle(29, 32, 295, 20));
	
	JTextField tCpfCliente = new JTextField();
	tCpfCliente.setBounds(new Rectangle(332, 32, 121, 20));
	
	JTextField tFoneCliente = new JTextField();
	tFoneCliente.setBounds(new Rectangle(30, 78, 121, 20));
	
	JTextField tEmailCliente = new JTextField();
	tEmailCliente.setBounds(new Rectangle(165, 78, 288, 20));
	
	JTextField tEndCliente = new JTextField();
	tEndCliente.setBounds(new Rectangle(30, 123, 423, 19));
	
	cliente.add(nomeCliente);
	cliente.add(tNomeCliente);
	cliente.add(cpfCliente);
	cliente.add(tCpfCliente);
	cliente.add(foneCliente);
	cliente.add(tFoneCliente);
	cliente.add(emailCliente);
	cliente.add(tEmailCliente);
	cliente.add(endCliente);
	cliente.add(tEndCliente);
	
	return cliente;
}

}[/code]

vc pode criar um metodo get para cada textField e retorna dentro dele o texto do textFiled, o entao fazer um metodo generico para nao precisar criar um metodo para cada textField

não consigo criar metodos get para cada JTextField, pois os mesmo já estão dentro de um metodo get. Eu tentei fazer isso mas não consegui, quanto à outra sugestão que vc me deu, não faço idéia de como fazer…

Realmente assim vc não consegue… as variáveis são do método, ou seja, uma vez finalizado o método, essas variáveis não são mais acessíveis.
MAS, como vc guardou uma referência a elas no JPanel (cliente.add), na sua outra classe vc pode usar o método getComponents() do JPanel para recuperar os componentes…
Isso não é muito elegante, mas diante da sua arquitetura é uma solução, ok?

Outra idéia seria criar painéis específicos, tipo ClientePanel extends JPanel, e nessa classe colocar os fields com os respectivos get/set…

então é a minha lógica que não está muito legal? Sabe essa minha classe PaineisCadastro? nela eu faço o método get pra cada tipo de cadastro…tanto para clientes, como também para fornecedores…e tals…vc acha que seria melhor eu fazer uma classe para cada tipo de cadastro?

Tô com o Diego Silveira, o seu método já está um absurdo; já contrariou vários conselhos de boas práticas até o momento.

flws.

então me ajuda gente…ainda estou no primeiro semestre que eu to cursando java…alguém poderia dar sugestões? obrigado

SUGESTÂO:

[code]public class ClienteView extends JPanel {
private JTextField tNomeCliente = null;
private JTextField tCpfCliente = null;
private JTextField tFoneCliente = null;
private JTextField tEmailCliente = null;
private JTextField tEndCliente = null;

public ClienteView() {
	this.inicializar();
}

private void inicializar() {
	setLayout(null);

	JLabel nomeCliente = new JLabel("Nome");
	nomeCliente.setBounds(new Rectangle(29, 14, 47, 20));

	JLabel cpfCliente = new JLabel("CPF");
	cpfCliente.setBounds(new Rectangle(332, 14, 37, 20));

	JLabel foneCliente = new JLabel("Telefone");
	foneCliente.setBounds(new Rectangle(30, 60, 55, 20));

	JLabel emailCliente = new JLabel("E-mail");
	emailCliente.setBounds(new Rectangle(165, 60, 46, 20));

	JLabel endCliente = new JLabel("Endereço");
	endCliente.setBounds(new Rectangle(30, 105, 60, 20));

	this.tNomeCliente = new JTextField();
	this.tNomeCliente.setBounds(new Rectangle(29, 32, 295, 20));

	this.tCpfCliente = new JTextField();
	this.tCpfCliente.setBounds(new Rectangle(332, 32, 121, 20));

	this.tFoneCliente = new JTextField();
	this.tFoneCliente.setBounds(new Rectangle(30, 78, 121, 20));

	this.tEmailCliente = new JTextField();
	this.tEmailCliente.setBounds(new Rectangle(165, 78, 288, 20));

	this.tEndCliente = new JTextField();
	this.tEndCliente.setBounds(new Rectangle(30, 123, 423, 19));
	
	super.add(nomeCliente);  
	super.add(tNomeCliente);  
	super.add(cpfCliente);  
	super.add(tCpfCliente);  
	super.add(foneCliente);  
	super.add(tFoneCliente);  
	super.add(emailCliente);  
	super.add(tEmailCliente);  
	super.add(endCliente);  
	super.add(tEndCliente); 		
}

public JTextField getTNomeCliente() {
	return tNomeCliente;
}

public JTextField getTCpfCliente() {
	return tCpfCliente;
}

public JTextField getTFoneCliente() {
	return tFoneCliente;
}

public JTextField getTEmailCliente() {
	return tEmailCliente;
}

public JTextField getTEndCliente() {
	return tEndCliente;
}

}
[/code]
Na linha onde vc escreveu ???.getCliente() vc escreve ClienteView clienteView = new ClienteView();, agora sim; vc poderá obter os JTextFields desta maneira JTextField txtFoneCliente = clienteView.getTFoneCliente();

Os getters da classe poderia já devolver o conteúdo editado no JTextField assim:

public String getEmailCliente() { return tEmailCliente.getText(); }

Talvez fosse melhor assim.

Esta é apenas uma sugestão, fique livre para alterar os nomes (classe, variáveis) a vontade e fazer modificações necessárias.

Espero ter ajudado e que não dê muito erros pois editei mas não executei antes de enviar :oops:

flws

Fantomas,

Você ajudou muito. Antes de vc me mandar essa sugestão, eu já estava executando dessa maneira, e está funcionando direitinho…agora estou com dificuldades para ler algo que gravo no Vector…valeu um abraço

aí fantomas…será que eu posso fazer assim? cliente.setNomeCliente(cliente.getTNomeCliente);
estou querendo setar o nome do cliente…no meu está dando NULL pointer exception

Parece que cliente está nulo, tem como mandar um techo de código maior?

flws

cliente é um objeto da mesma classe que vc escreveu pra me ajudar. dá uma olhada lá em cima… ClienteView

A sua idéia de usar cliente.setNomeClient(…) é para iniciar o JTextField da janela? É isso?

flws

não…a idéia é simplesmente mandar um nome para um objeto da classe Cliente…valeu

Não se entendi direito, por um acaso é isso aqui?

Cliente cliente = new Cliente(); ... ClienteView clienteView = new ClienteView(); ... cliente.setNomeCliente(clienteView.getTNomeCliente().getText()); // <---<< Atenção para o getText(), ele retorna o conteúdo digitado cliente.setCpfCliente(clienteView.getTCpfCliente().getText()); cliente.setEmailCliente(clienteViewl.getTEmailCliente().getText()); ...

Considerando o código que enviei não deveria dar [color=red]null pointer exception[/color] em clienteView.getTNomeCliente() porque existe esta linha this.tNomeCliente = new JTextField(); que inicializa o objeto do tipo JTextField para editar o nome do caboclo, faz uma verificação nas inicializações dos objetos.

flws

É desse jeito aí mesmo…mas agora eu mudei toda a lógica e tá funcionando…agora eu to com problemas em recuperar registros EM UM VECTOR