Comparação com JTextField

6 respostas
J

eu não estou conseguindo fazer a comparação para testar se us TextFields estão todos completos antes de inserir no banco naum sei se devo usar null ou " "

aii está o codigo du action do botão que foi aonde coloquei o if para testar se os TextFields estão preenchidos

if (event.getSource() == btnadicionar)

{

if((txtnome.getText()=="") || (txtidquarto.getText()==""))

{

lbresposta.setText(Falta Quarto ou nome);

}

else

{

lbresposta.setText("");

constrpessoas Salvar= new constrpessoas (txtnome.getText(),txtidquarto.getText());
//adiciona o dado e mostra na tela grafica
    		String Status = Salvar.inserir_pe();
    		lbresposta.setText(Status);
    		
    		//limpa os campos
    		txtnome.setText("");
			txtidquarto.setText("");
			
    		
    		//redimensiona a janela pro componentes
			pack();
    		
    		}
    	}

6 Respostas

J

Ae blza??

Tenta assim:

if(((txtnome.getText().equals("")) || (txtidquarto.getText().equals("")))

Julio

Mantu

Se existe a possibilidade de vir null(E quando trabalhamos com banco de dados essa possibilidade não é remota, e com usuários, é quase certa), nunca é demais conferir se tá nul primeiro a String. Mas se a String tá vindo de algum JTextField, naum precisa porque ele vai te retornar, no máximo um “”…
O código fica melhor ainda sem essa penca de parênteses…

...
if(txtnome.getText().equals("") || txtidquarto.getText().equals(""))
...
J

uhum deu certoo funciono brigado pela diga…

J

Por favor me corrigam se eu tiver errado…

Quando vc usa == para comparar Strings, se é comparado o endereço de memória dos manipuladores.
Quando vc quer comparar o conteúdo, deve-se utilizar o .equals().
Há somente um caso que == funciona para compara conteúdo de strings, se elas forem inicializadas como literais.

Por exemplo:
String s1 = “Olá mundo”
String s2 = “Olá mundo”
if(s1 == s2)

Mantu

jfranco, É mais ou menos por aí. Só não gostei muito da palavra “conteudo”… O que rola é que o método equals implementa uma avaliação de equivalência, que pode não ser simplesmente relacionada com “conteúdos iguais”. Por exemplo, suponha que tenhamos uma classe Cliente com a seguinte cara:

public class Cliente{
	private String cpf;
	private String nome;
	private String sobrenome;
	...
}

Vamos supor que essa classe vai ser utilizada para um programa de contas bancárias, onde para um cliente ser identificado de forma única, basta vermos o seu CPF. Nesse caso, teriamos que implementar o método equals() (que vem da classe Object) da seguinte forma:

public boolean equals(Object obj){
	if(obj == null)
		return false;

	if(!(obj instanceof Cliente))
		return false;

	if(obj == this)
		return true;

	Cliente other = (Cliente)obj;
	return this.cpf.equals(other.cpf);
}

Isso porque a Classe String tem lá a sua implementação do método equals();
Agora, vamos supor que nossa lógica de negócio fosse de tal forma que, só o CPF, não bastasse para identificar univocamente um Cliente (Por exemplo, uma criança sem CPF poderia ser cadastrada com o CPF do responsável). Então a implementação seria diferente:

public boolean equals(Object obj){
	if(obj == null)
		return false;

	if(!(obj instanceof Cliente))
		return false;

	if(obj == this)
		return true;

	Cliente other = (Cliente)obj;
	return 
		this.cpf.equals(other.cpf) &&
		this.nome.equals(other.nome) &&
		this.sobrenome.equals(other.sobrenome)
	;
}

Quanto ao lance que vc mencionou no final, é verdade. Provavelmente o compilador deve perceber que as Strings (que estão declaradas no mesmo escopo) são equivalentes e, para economizar memória, faz as duas referências apontarem para um único endereço de memória que contém a String, acho que deve ser algo assim. Porém, é melhor sempre usar o equals mesmo, pra criar o hábito… :thumbup:

L

Uma coisa que eu aprendi da pior maneira é essa:
nunca compara strings com ==, e sim com o método equals. Não sei porque ele se perde as vezes com o ==, alguém pode me dizer porque?

valeu :wink:

Criado 7 de junho de 2006
Ultima resposta 8 de jun. de 2006
Respostas 6
Participantes 4