Ejemplo 02: Diferencias de validar un JTextField y un JFormattedTextField
En este ejemplo, compararemos la validación de un JTextField con la validación de un JFormattedTextField.
En primera instancia debemos comprender que un JTextField es un componente de texto simple que no tiene una validación incorporada, mientras que un JFormattedTextField es un componente de texto que permite aplicar una máscara de formato para validar la entrada del usuario u otro formateador personalizado.
Validación con JTextField
Para validar un JTextField, podemos usar la función setInputVerifier para establecer un verificador de entrada personalizado. Aquí hay un ejemplo de cómo validar que el texto ingresado en un JTextField sea un número entero:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JTextFieldValidationExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Validación con JTextField");
JTextField textField = new JTextField(20);
JButton validateButton = new JButton("Validar");
// Establecer un InputVerifier para validar la entrada
textField.setInputVerifier(new InputVerifier() {
@Override
public boolean verify(JComponent input) {
String text = ((JTextField) input).getText();
try {
Integer.parseInt(text); // Intentar convertir a entero
return true; // Validación exitosa
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(frame, "Por favor, ingresa un número entero.");
return false; // Validación fallida
}
}
});
validateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (textField.getInputVerifier().verify(textField)) {
JOptionPane.showMessageDialog(frame, "¡Entrada válida!");
}
}
});
frame.setLayout(new FlowLayout());
frame.add(textField);
frame.add(validateButton);
frame.setSize(300, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
En este caso podemos notar que creamos una clase anónima que extiende de InputVerifier para validar la entrada del JTextField. Si el texto ingresado no es un número entero, se muestra un mensaje de error. Si la validación es exitosa, se muestra un mensaje de confirmación.
Aunque, debemos tener en cuenta que esta validación se realiza cada vez que el campo pierde el foco, lo que puede no ser ideal para todos los casos de uso. Además, el componente InputVerifier no proporciona una forma de formatear la entrada, lo que puede ser una limitación en algunos casos.
Validación con JFormattedTextField
Para validar un JFormattedTextField, podemos usar una máscara de formato para restringir la entrada del usuario. Por ejemplo, si queremos que el usuario ingrese una fecha en el formato "dd/MM/yyyy", podemos hacer lo siguiente:
import javax.swing.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class JFormattedTextFieldValidationExample {
public static void main(String[] args) {
JFrame frame = new JFrame("Validación con JFormattedTextField");
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
JFormattedTextField formattedTextField = new JFormattedTextField(dateFormat);
formattedTextField.setColumns(20);
JButton validateButton = new JButton("Validar");
validateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
dateFormat.parse(formattedTextField.getText()); // Intentar parsear la fecha
JOptionPane.showMessageDialog(frame, "¡Entrada válida!");
} catch (ParseException ex) {
JOptionPane.showMessageDialog(frame, "Por favor, ingresa una fecha en el formato dd/MM/yyyy.");
}
}
});
frame.setLayout(new FlowLayout());
frame.add(formattedTextField);
frame.add(validateButton);
frame.setSize(300, 100);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Ejemplo 01: Creando un validador abstracto de expresiones
En este ejemplo, crearemos una clase abstracta para validar expresiones regulares y luego implementaremos una subclase concreta que valide direcciones de correo electrónico.
Ejemplo 03: Creando una Aplicación con GUI en Java Swing
En este ejemplo, crearemos una aplicación simple con una interfaz gráfica utilizando Java Swing. La aplicación consistirá en una ventana con un botón que, al hacer clic, mostrará un mensaje en la consola.