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:
ArrayListlista=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
Publicar un comentario