public class ValidarFecha extends JFrame{
private JTextField campoFecha;
private JButton btValidar;
public ValidarFecha() {
campoFecha = new JTextField(10);
btValidar = new JButton("Validar"); btValidar.addActionListener(new AccionValidarFecha());
JPanel campo = new JPanel();
campo.setBorder(new EmptyBorder(20, 80, 20, 80));
campo.add(campoFecha);
JPanel boton = new JPanel();
boton.add(btValidar);
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
add(campo);
add(boton);
setTitle("Validar Fecha"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private class AccionValidarFecha implements ActionListener { @Override
public void actionPerformed(ActionEvent e) { String fecha = campoFecha.getText();
if (fecha.isBlank())
JOptionPane.showMessageDialog(null, "Campo vacío");
else { String[] partesFecha = fecha.split("-"); //Comprobamos si tenemos tres partes
if (partesFecha.length == 3) { if (!validarAnio(partesFecha[0]))
JOptionPane.showMessageDialog(null, "El AÑO no es correcto");
else if (!validarMes(partesFecha[1]))
JOptionPane.showMessageDialog(null, "El MES no es correcto");
else if (!validarDia(partesFecha[2]))
JOptionPane.showMessageDialog(null, "El DIA no es correcto");
else
JOptionPane.showMessageDialog(null, "Formato de fecha parece correcto");
}
else
JOptionPane.showMessageDialog(null, "Formato incorrecto");
}
}
}
private boolean validarDia(String dia) { if (dia.length() != 2) //Comprobamos que son dos caracteres
return false;
else { //Y que es un valor numérico, entre 0 y 31 try { int dd = Integer.parseInt(dia);
return (dd > 0 && dd < 31);
}
catch(NumberFormatException e) { return false; //No se ha tecleado un valor numérico
}
}
}
private boolean validarMes(String mes) { if (mes.length() != 2)
return false;
else { try { int mm = Integer.parseInt(mes);
return (mm > 0 && mm < 13);
}catch(NumberFormatException e) { return false;
}
}
}
private boolean validarAnio(String anio) { if (anio.length() != 4)
return false;
else { try { int aaaa = Integer.parseInt(anio);
return (aaaa != 0); //Aquí depende de que fechas queremos aceptar
} catch(NumberFormatException e) { return false;
}
}
}
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override
public void run() { new ValidarFecha();
}
});
}
}