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();
}
});
}
}