Validações!

5 respostas
JorjaoCorreia

Tenho um jTextField e não quero que ele aceite letras e numeros negativos, como faço isso?

Obrigado.

5 Respostas

Eric_Yuzo

A validação pode ser feita com InputVerifier, ou então, pode implementar um Document que não permita a inserção de letras e sinal de menos.

JorjaoCorreia

eai cara blz?

mais como eu faço isso? iahuhuiahuia

Eric_Yuzo
Já tentou rodar o exemplo do link que passei? Vai um exemplo com InputVerifier (Praticamente igualzinho ao do javadoc) que verifica se apenas letras maiúsculas foram digitadas. Enquanto o texto não for válido, o foco fica preso no text field.
import java.awt.*;
 import java.util.*;
 import java.awt.event.*;
 import javax.swing.*;
 
public class VerifierTest extends JFrame {
     public VerifierTest() {
         JTextField tf1 = new JTextField ("Type only upper case letters here");
 	   getContentPane().add (tf1, BorderLayout.NORTH);
 	   tf1.setInputVerifier(new PassVerifier());
 
 	   JTextField tf2 = new JTextField ("TextField2");
 	   getContentPane().add (tf2, BorderLayout.SOUTH);
 
 	   WindowListener l = new WindowAdapter() {
 	       public void windowClosing(WindowEvent e) { 
 	           System.exit(0); 
 	       }
 	   };
 	   addWindowListener(l);
     }
 
     class PassVerifier extends InputVerifier {
         public boolean verify(JComponent input) {
 	       JTextField tf = (JTextField) input;
 	       return tf.getText().matches("[A-Z]+"); // Verifica se o texto contém apenas letras maiúsculas.
         }
     }
 
     public static void main(String[] args) {
         Frame f = new VerifierTest();
 	   f.pack();
 	   f.setVisible(true);
     }
 }
A verificação dos caracteres para validação deve ser implementada no método "verify".

Se precisar que caracteres inválidos nem apareçam no text field, tem de implementar um Document. Daqui a pouco posto um exemplo simples.

Eric_Yuzo
Adaptei o exemplo anterior para utilizar Document.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;
 
public class DocumentTest extends JFrame {
     public DocumentTest() {
         JTextField tf1 = new JTextField ();
 	   getContentPane().add (tf1, BorderLayout.NORTH);
 	   tf1.setDocument(new UpperCaseDocument());
 
 	   WindowListener l = new WindowAdapter() {
 	       public void windowClosing(WindowEvent e) { 
 	           System.exit(0); 
 	       }
 	   };
 	   addWindowListener(l);
     }
 
     class UpperCaseDocument extends PlainDocument {
         @Override
        public void insertString(int offs, String str, AttributeSet a)
        		throws BadLocationException {
        	 String allowed = str.replaceAll("[^A-Z]", ""); // Apaga todos os caracteres que não sejam letras maiúsculas.
        	super.insertString(offs, allowed, a);
        }
     }
 
     public static void main(String[] args) {
         Frame f = new DocumentTest();
 	   f.pack();
 	   f.setVisible(true);
     }
 }
Este exemplo nem insere no text field os caracteres que não sejam letras maiúsculas.

Agora tem de melhorar e adaptar os exemplos para validar os dados conforme sua necessidade.

Tente implementar alguma coisa e conforme surgirem dúvidas, vá postando.

casilvamg

Usa regex.

Criado 30 de novembro de 2010
Ultima resposta 30 de nov. de 2010
Respostas 5
Participantes 3