JTextField dentro de metodo get

15 respostas
A

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!!!

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;
	}
}

15 Respostas

marcosharbs

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

A

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…

Diego_Silveira

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…

A

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?

fantomas

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.

A

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

fantomas

SUGESTÂO:

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;
	}
}
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

A

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

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

fantomas

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

flws

A

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

fantomas

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

flws

A

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

fantomas

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

A

É 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

Criado 12 de novembro de 2008
Ultima resposta 13 de nov. de 2008
Respostas 15
Participantes 4