Validación de datos

 
En programación es muy importante contar con validación de los campos, ya que si el usuario ingresa letras en un campo donde solo se permiten números o viceversa la aplicación puede mandar error y hará que la aplicación se detenga.

Para evitar estos errores contamos con formas de validar los campos usando expresiones regulares o utilizando eventos del teclado.

Crearemos la clase "Persona" :

 
package paquete;

public class Persona {
 private String dni,nombres,apellidos,correo;
 public String getCorreo() {
  return correo;
 }

 public void setCorreo(String correo) {
  this.correo = correo;
 }

 public int getEdad() {
  return edad;
 }

 public void setEdad(int edad) {
  this.edad = edad;
 }

 private int edad;
 

 public String getDni() {
  return dni;
 }

 public void setDni(String dni) {
  this.dni = dni;
 }

 public String getNombres() {
  return nombres;
 }

 public void setNombres(String nombres) {
  this.nombres = nombres;
 }

 public String getApellidos() {
  return apellidos;
 }

 public void setApellidos(String apellidos) {
  this.apellidos = apellidos;
 }
 
}

Ahora crearemos un formulario el cual tendrá 5 JtextField( dni, nombres, apellidos, edad, correo), una tabla y un botón adicionar.

Se creará un ArrayList de la clase "Persona" para guardar los datos de las personas:

 
ArrayList lista=new ArrayList<>();

Para validar que el dni no se repita se creará un método "validar":

boolean validar(String dni){
boolean validar=true;
for(Persona p:lista){
    if(p.getDni().equals(dni)){
        validar=false;
        break;
}
}
return validar;
}

Un método "listar " que mostrará los datos en la tabla:

boolean validar(String dni){
void listar(){
 modelo.setRowCount(0);
 for(Persona p:lista){
  Object[] fila={
   p.getDni(),
   p.getNombres(),
   p.getApellidos(),
   p.getEdad(),
   p.getCorreo() 
  };
  modelo.addRow(fila);
 }
}

Utilizando expresiones regulares para validar:

Se declaran las variables globales:

String xdni="\\d{8}";//dni con 8 caracteres
String xletras="[^\\d]{3,50}";//cualquier caracter menos números
String xcorreo="\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}";//validación de correo

Si quieren saber como se validan otros campos, visiten el link que les dejo: www.regexlib.com

Este código validará que todos los campos sean completados, en el campo dni se ingrese exáctamente 8 números y que éste no se repita; el campo nombre y apellido se ingresen caracteres que no sean números; el campo edad sea mayor a 18 años y que el correo sea válido.

Persona p=new Persona();
p.setDni(txtDni.getText().trim());
p.setNombres(txtNombres.getText().trim());
p.setApellidos(txtApellidos.getText().trim());
p.setEdad(Integer.parseInt(txtEdad.getText().trim()));
p.setCorreo(txtCorreo.getText().trim());
if(!p.getDni().equals("") && !p.getNombres().equals("") && !p.getApellidos().equals("") &&
!txtEdad.getText().trim().equals("") && !p.getCorreo().equals("")){
 if(validar(p.getDni())){
  if(p.getDni().matches(xdni)){
   if(p.getNombres().matches(xletras)){
    if(p.getApellidos().matches(xletras)){
     if(p.getEdad()>=18){
      if(p.getCorreo().matches(xcorreo)){
       lista.add(p);
       listar();
      }else
       JOptionPane.showMessageDialog(this, "correo no válido");
     }else
      JOptionPane.showMessageDialog(this, "La persona es menor de edad");
      
    }else
     JOptionPane.showMessageDialog(this, "El apellido no esválido");
   }else
    JOptionPane.showMessageDialog(this, "El nombre no es válido");
  }else
   JOptionPane.showMessageDialog(this, "El dni no es válido");
   
 }else
  JOptionPane.showMessageDialog(this, "El dni ya existe");
}else
 JOptionPane.showMessageDialog(this, "Todos los campos son obligatorios");


Validando con eventos del teclado:

Creamos una clase llamada "ValidarCampos":

package paquete;

import java.awt.event.KeyEvent;

import javax.swing.JTextField;

public class ValidarCampos {
 public static void soloLetras(KeyEvent e,JTextField txt,int maximo){
  char letra=e.getKeyChar();
  if(Character.isDigit(letra) || txt.getText().trim().length()>=maximo){
   e.consume();
   txt.requestFocus();
  }
 }
 public static void soloNumeros(KeyEvent e,JTextField txt,int maximo){
  char letra=e.getKeyChar();
  if(!Character.isDigit(letra) || txt.getText().trim().length()>=maximo){
   e.consume();
   txt.requestFocus();
  }
 }

}

Ahora dentro del evento del campo edad pondremos el siguiente código:

ValidarCampos.soloNumeros(arg0, txtEdad, 3);

El primer parámetro indica el evento que recibe, el segundo sobre que campo se realiza la validación y el tercero los caracteres máximos que se pueden escribir

Comentarios