validação textfields

11 respostas
andretco

oi pessoal, feliz ano novo!!

tenho um problema de como fazer validação de textfields…

tenho 6 textfields e eles não podem aceitar vazio ou nome iguais…
e que ao apertar o botão OK não me deixe continuar se os textfields não estão válidos…

alguém tem alguma idéia como posso fazer isso???

muito obrigado.

11 Respostas

Anderson_pqdt

kara, o que vc precisa fazer eh simples, mas eu preciso de mais informação para te ajudar.

tente colocar algo como o que vc quer impedir que execute caso estejam vazios os textFields por exemplo.

entao a gente conversa.

L

para saber se os textfields estao vazios… teste:

txtExemplo.getText().trim().lengh() > 0

getText() -> recupera o conteúdo digitado
trim() -> retira espaços em branco no inicio e no fim
.lenght() -> retorna um inteiro com o tamanho final da String

Emersonsts

Tenta isso:

  • Para validação != de vazio
if (txtExemplo.getText().equals("")) {
    JOptionPane.showMessageDialog(null, "Campo tal nao pode ser vazio!");
}
  • Para um nao ser igual a outro tenta:
if (!txtExemplo.getText().equals("")) {
   if (txtExemplo.getText().equals(txtExemplo2.getText())) {
	OptionPane.showMessageDialog(null, "Campo 1 igual ao campo 2");
   }
}

Eu nunca testei com o trim() mas pode tentar né…

Espero ter ajudado… No meu aqui funcionou…

t+

andretco

ok…entendi como se faz para não aceitar vazios e que 2 textos não sejam iguais…valeu!!

mas como faço isso para os 6 textos?

tentei fazer mas me enrolei todo como os if e os operadores lógicos && e ||…

não consigo fazer que ao momento de encontrar varios iguais ou vazios …me mande só uma mensagem de igual ou só uma mensagem de vazio…

fiz isto mas não dá certo…e não sei aonde colocar os avisos…

if (naoVazio(texto1)&&checkBoxTexto1.isSelected()){
      if((checkBoxTexto2.isSelected()&&naoVazio(texto2)&&naoIguais(texto1, texto2))||
         (checkBoxTexto3.isSelected()&&naoVazio(texto3)&&naoIguais(texto1, texto3))||
         (checkBoxTexto4.isSelected()&&naoVazio(texto4)&&naoIguais(texto1, texto4))||
          ....e assim por diante){
             //trabalhar com os textos validados
       }
       
}

if (naoVazio(texto2)&&checkBoxTexto2.isSelected()){
      if((checkBoxTexto1.isSelected()&&naoVazio(texto1)&&naoIguais(texto1, texto2))||
         (checkBoxTexto3.isSelected()&&naoVazio(texto3)&&naoIguais(texto1, texto3))||
         (checkBoxTexto4.isSelected()&&naoVazio(texto4)&&naoIguais(texto1, texto4))||
          ....e assim por diante){
             //trabalhar com os textos validados
       }
       
}

estou todo bem atrapalhado com isto…não estou conseguindo pensar bem…

brigadú…

W

Usa esse metodo:

public boolean notEquals(String... texts){
if(texts.length == 1)
   return true;
else{
  for(int i =0;i<texts.length-1;i++){
    for(int j =i+1;j<text.length;j++){
      if(texts[i].equals(texts[j]))
         return false;
    }
  }

}
return true;
}

Ai voce usa assim:

if(notEquals(jTextField1.getText(),jTextField2.getText(),jTextf..))
   //codigo que fará caso não sejam iguais...

PS.:Cuidado pra não confundir: Ele retorna true se não forem iguais…
PS.:Pode Testar quantas strings quizer …
Acho que é isso…

Flws

Emersonsts

Entao cara…

Realmente seu código esta meio confuso mesmo…
Vc esta trabalhando só com textFields ou com comboBox tbm?

Vou fazer uma telinha e por validações nela dai te mando a classe aqui mais tarde para vc ver…

andretco

desde já agradeço suas importantes ajudas pessoal… :slight_smile:

só pra clarificar um pouco mais…este é um exemplo do eu penso fazer:

eu consigo deixar o textfield correspondente ao checkbox não editavel…usando textField.setEditable(true) quando dou um click no chekbox…isso não é problema…

o problema são as validações e que ao momento de apertar o botão OK apareçam as 2 mensagens de advertência, seja de espaços vazios ou nomes iguais…ou seja, se tem erros não me deixe continuar…

não sei se é uma boa idéia fazer assim ou de outra maneira…pelo menos é única que tive…estou pensando em outras…

valeu!

Emersonsts

Acho q isso vai resolver seu problema… :wink:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Validacao extends JFrame implements ActionListener {
	
	private JPanel painelCampos, painelBotoes;
	private  JLabel lbNome1, lbNome2, lbNome3, lbAviso2, lbAviso;
	private JTextField edNome1, edNome2, edNome3;
	private JButton btLimpar, btValidar;
	
	public Validacao() {
		super("Teste de Validação");
		this.criarCampos();
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	//	this.setSize(new Dimension(500,200));
		this.pack();
		this.setLocationRelativeTo(null);  
		this.setVisible(true);
	}
	
	public void criarCampos() {
		this.painelCampos = new JPanel();
		this.painelCampos.setLayout(new GridLayout(4,2,5,5));
		
		this.lbNome1 = new JLabel(" Nome 1 : ");
		this.edNome1 = new JTextField();
		this.painelCampos.add(lbNome1);
		this.painelCampos.add(this.edNome1);
		
		this.lbNome2 = new JLabel(" Nome 2 : ");
		this.edNome2 = new JTextField();
		this.painelCampos.add(lbNome2);
		this.painelCampos.add(this.edNome2);
		
		this.lbNome3 = new JLabel(" Nome 3 : ");
		this.edNome3 = new JTextField();
		this.painelCampos.add(lbNome3);
		this.painelCampos.add(this.edNome3);
		
		this.lbAviso2 = new JLabel(" Os nomes nao devem se repetir!");
		this.lbAviso2.setForeground(Color.RED);
		this.lbAviso2.setVisible(false);
		this.painelCampos.add(lbAviso2);
		
		this.lbAviso = new JLabel("Todos os campos devem ser preenchidos!");
		this.lbAviso.setForeground(Color.RED);
		this.lbAviso.setVisible(false);
		this.painelCampos.add(lbAviso);
		
		this.getContentPane().add(painelCampos, BorderLayout.CENTER);
		
		this.painelBotoes = new JPanel();
		this.painelBotoes.setLayout(new FlowLayout());
		
		this.btLimpar = new JButton("Limpar");
		this.btLimpar.addActionListener(this);
		
		this.painelBotoes.add(btLimpar);
		
		this.btValidar = new JButton("Validar");
		this.btValidar.addActionListener(this);
		
		this.painelBotoes.add(btValidar);
		
		this.getContentPane().add(painelBotoes, BorderLayout.SOUTH);
		
		
	}

	public void limparDados() {
		this.edNome1.setText("");
		this.edNome2.setText("");
		this.edNome3.setText("");
		this.edNome1.setForeground(Color.BLACK);
		this.edNome2.setForeground(Color.BLACK);
		this.edNome3.setForeground(Color.BLACK);
		this.lbAviso.setVisible(false);
		this.lbAviso2.setVisible(false);
	}

	// Deve ter um jeito de fazer isso com menos linhas mas eu faria assim
	public boolean validar() {
		if (this.edNome1.getText().equals("") ||
			this.edNome2.getText().equals("") ||
			this.edNome3.getText().equals("")) {
			this.lbAviso.setVisible(true);
			return false;
		} else if (!(this.edNome1.getText().equals("") &&
					 this.edNome2.getText().equals("") &&
					 this.edNome3.getText().equals(""))) {
			
			if (this.edNome1.getText().equals(this.edNome2.getText())) {
				this.edNome1.setForeground(Color.RED);
				this.edNome2.setForeground(Color.RED);
				this.edNome3.setForeground(Color.BLACK);
				this.lbAviso2.setVisible(true);
				return false;
			} else if (this.edNome1.getText().equals(this.edNome3.getText())) {
				this.edNome1.setForeground(Color.RED);
				this.edNome2.setForeground(Color.BLACK);
				this.edNome3.setForeground(Color.RED);
				this.lbAviso2.setVisible(true);
				return false;
			}  else if (this.edNome2.getText().equals(this.edNome3.getText())) {
				this.edNome1.setForeground(Color.BLACK);
				this.edNome2.setForeground(Color.RED);
				this.edNome3.setForeground(Color.RED);
				this.lbAviso2.setVisible(true);
				return false;
			}
			
		}
		
		return true;
	}
	
	public static void main(String[] args) {
		new Validacao();
	}

	public void actionPerformed(ActionEvent e) {
		if(e.getSource() == btLimpar) {
			this.limparDados();
		}
		
		if(e.getSource() == btValidar) {
			if (validar()) {
				JOptionPane.showMessageDialog(null, "Validado com sucesso!");
				this.limparDados();
			}
		}
		
	}
}

Eu coloquei umas frescurinhas de cor para se forem iguais mas nao é necessario se nao quiser…

A

No site abaixo existe uma API que vc pode utilizar “validators” no seu JTextField…
Bem interessante testei achei legal mas naum “fucei” muito nele naum

http://swinglabs.org/

Colocar automaticamente cor e avisos se necessário, trabalho em conjunto com a SwingWorker…

andretco

muito obrigado pela sua grande ajuda Emersonsts!!! :)…vou implementar-la agora mesmo…

muito interesante os frameworks do swinglabs andrericarte…valeu!

e muito obrigado pelo método waldson!

enfim, obrigado a todos :smiley:

Emersonsts

Disponha meu amigo…
Ajudando agente tbm aprende… ^^

Só toma cuidado pra nao fazer “ifs” desnecessarios…
Por exemplo:

esse if quer dizer q nome1 = nome2

if (this.edNome1.getText().equals(this.edNome2.getText())) {  
this.lbAviso2.setVisible(true);  
return false;

e esse if quer dizer q nome2 = nome1

if (this.edNome2.getText().equals(this.edNome1.getText())) {  
this.lbAviso2.setVisible(true);  
return false;

Ou seja, as vezes agente pensa q vai precisar de um monte de if (como eu pensei) qdo na verdade nem sao tantos assim…

Criado 6 de janeiro de 2008
Ultima resposta 7 de jan. de 2008
Respostas 11
Participantes 6