[RESOLVIDO] Validação de campos

9 respostas
KamillaaaH

Estou fazendo a validação de campos aqui, quero permitir a entrada somente de caracteres ou somente de números… Fiz uma classe abstrata Validar e as outras extendem e implementam o método valida(). No método valida() eu uso Keylistener… Vi como se usa isso há pouco tempo e ainda tenho muitas dúvidas só que preciso entregar esse código pronto hoje.

Tá aqui o que eu fiz:

package validar;

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JTextField;

public class ValidarNumero extends Validar {

	JTextField tf = new JTextField(); 

	void valida() {
		getContentPane().setLayout(null);  

		tf.setBounds(50,50, 120,20);  
		tf.addKeyListener(
				new KeyListener(){  

				
					public void keyTyped(KeyEvent e) {  
						char c = e.getKeyChar();  
						if(!Character.isDigit(c)){  
							e.consume();  
						}     

					}  


					public void keyPressed(KeyEvent e) {  



					}  
					public void keyReleased(KeyEvent e) {  


					}  

				});  

		getContentPane().add(tf);  
		setSize(250,250);  
		setVisible(true);  
	}

	public static void main(String args[]){  
		ValidarNumero n = new ValidarNumero();  
		n.valida();

	}
}

Essa classe valida a entrada de números.

As minhas dúvidas são…
Como limitar o número de caracteres digitados?
E como verificar se o campo está em branco?

Obrigada!

9 Respostas

thundercas

Olá KamillaaaH,

Já que você está utilizando Swing, sempre que precisar de formatação de campos ou restrição de caracteres, utilize:

JFormattedTextField e MaskFormatted.

Boa Sorte.

KamillaaaH

Então não dá pra fazer com KeyListener? =S

thundercas

Dá para fazer sim, mas você terá que criar um método (ou classe) para validação dos caracteres…

Para limitar, você terá que criar uma variável (talvez estática) para guardar todos os caracteres digitados. Daí, em cima desta variável, você fará as validações… Mas o caminho mais fácil mesmo é o JFormattedTextField…

KamillaaaH

Tenho aqui um exemplo com JFormattedTextField…

package validar;
import java.text.ParseException;  

import javax.swing.JFormattedTextField;  

import javax.swing.JFrame;  
import javax.swing.JTextField;  
import javax.swing.text.MaskFormatter;  

public class CampoFormatadoExemplo extends JFrame {  

	JTextField txt;  

	public CampoFormatadoExemplo() {  
		super("Exemplo de Campo Formatado");  
		setDefaultCloseOperation(EXIT_ON_CLOSE);  
		setSize(200, 100);  
		setLayout(null);  


		/*O JFormattedTextField é uma classe que herda de JTextField 
    No construtor ele recebe um maskformatter, cujo construtor recebe uma 
    string com a formatação, no caso, coloquei que só números podem entrar 
    Importante que ele gera um exceção se não conseguir fazer parse da máscara 
    para o campo de texto 

		 */        
		try {  
			txt = new JFormattedTextField(new MaskFormatter("###########"));  
		} catch (ParseException e) {  
			System.out.println("Erro ao gerar máscara");  
		}  
		txt.setBounds(5, 20, 100, 20);  
		add(txt);  

	}  

	public static void main(String[] args) {  
		new CampoFormatadoExemplo().setVisible(true);  
	}  
}

Muito mais entendível pra mim…
Só que… como modifico pra aceitar caracteres ou como eu verifico se o campo está em braco?

thundercas

Dê uma olhada na API do Java 6, não me recordo o nome dos métodos, mas é algo como “setValidCharacters()” e “length()”.

KamillaaaH

Ok, vou tentar implementar e qualquer coisa eu volto aqui. =D
Obrigada!

KamillaaaH

JFormattedTextField entendido… só tenho um problema… Como usar JOptionPane pra obter a entrada desses dados?
Tipo… telefone, data e talz?

package validar;

import java.awt.FlowLayout;
import java.text.ParseException;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.text.MaskFormatter;

public class TextFieldComMascara extends JFrame{
	private JFormattedTextField telefone;
	private JFormattedTextField data;
	private MaskFormatter ftmTelefone;
	private MaskFormatter ftmData;



	public TextFieldComMascara() throws ParseException{

		ftmTelefone = new MaskFormatter("####-####");
		ftmData = new MaskFormatter("##/##/####");

		telefone = new JFormattedTextField(ftmTelefone);
		data = new JFormattedTextField(ftmData);

		ftmTelefone.setValidCharacters("[telefone removido]");
		ftmData.setValidCharacters("[telefone removido]");

		telefone.setColumns(6);
		data.setColumns(6);

		add(telefone);
		add(data);


		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setSize(100, 200);
		setVisible(true);
		setLayout(null);
	}


	public static void main(String[] args) {


		try{

			TextFieldComMascara teste = new TextFieldComMascara();
		}catch(ParseException e){
			e.printStackTrace();
		}
	}





}
KamillaaaH

Acho que minha pergunta não está bem formulada… É o seguinte, preciso colocar algo como "Insira o telefone: " ou "Insira a data: ". A partir daí, quando o usuário clicar no “Ok” quero que verifique se o campo está em branco…
é isso…

luiz_renato

Cara,

Nesse seu caso é melhor usar um JDialog modal c/ JFormattedTextField e JButton para mostrar a mensagem no lugar de um JOptionPane.

Criado 10 de novembro de 2009
Ultima resposta 10 de nov. de 2009
Respostas 9
Participantes 3