¿Cómo validar un campo de texto para ingresar solo 4 dígitos después del punto decimal en Swing?¿Cómo validar un JTextField?
Respuesta
Cualquier validación en Swing se puede realizar utilizando un InputVerifier
.
1. En primer lugar crear su propio verificador de entrada:
public class MyInputVerifier extends InputVerifier {
@Override
public boolean verify(JComponent input) {
String text = ((JTextField) input).getText();
try {
BigDecimal value = new BigDecimal(text);
return (value.scale() <= Math.abs(4));
} catch (NumberFormatException e) {
return false;
}
}
}
2. A continuación, asigne una instancia de esa clase a su campo de texto. (De hecho, cualquier JComponent
puede ser verificado)
myTextField.setInputVerifier(new MyInputVerifier());
Por supuesto, también puede utilizar una clase interna anónima, pero si el validador se va a utilizar en otros componentes, también, una clase normal, es mejor.
También eche un vistazo a la documentación de SDK: JComponent#setInputVerifier.
Probablemente pueda lograr lo mismo con DocumentListener
. Todo lo que tiene que hacer es validar la cadena de entrada con el patrón de cadena deseado. En este caso, el patrón parece ser uno o más dígitos, seguido de un punto, Y exactamente 4 dígitos después del punto decimal. El código siguiente muestra cómo utilizar DocumentListener
para lograr esto:
public class Dummy
{
private static JTextField field = new JTextField(10);
private static JLabel errorMsg = new JLabel("Invalid input");
private static String pattern = "\\d+\\.\\d{4}";
private static JFrame frame = new JFrame();
private static JPanel panel = new JPanel();
public static void main(String[] args)
{
errorMsg.setForeground(Color.RED);
panel.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(5, 0, 0, 5);
c.gridx = 1;
c.gridy = 0;
c.anchor = GridBagConstraints.SOUTH;
panel.add(errorMsg, c);
c.gridx = 1;
c.gridy = 1;
c.anchor = GridBagConstraints.CENTER;
panel.add(field, c);
frame.getContentPane().add(panel);
field.getDocument().addDocumentListener(new DocumentListener()
{
@Override
public void removeUpdate(DocumentEvent e)
{
validateInput();
}
@Override
public void insertUpdate(DocumentEvent e)
{
validateInput();
}
@Override
public void changedUpdate(DocumentEvent e) {} // Not needed for plain-text fields
});
frame.setSize(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
private static void validateInput()
{
String text = field.getText();
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(text);
if (m.matches())
{
errorMsg.setForeground(frame.getBackground());
}
else
{
errorMsg.setForeground(Color.RED);
}
}
}
Mientras el campo de texto no contiene una entrada válida, el mensaje de error se muestra como la siguiente imagen.
Una vez validada la entrada, el mensaje de error no será visible.
Por supuesto, se puede sustituir la acción de validación para lo que necesite. Por ejemplo, es posible que desee mostrar algunas ventanas emergentes cuando se hace clic en un botón si la entrada no es válida, etc.
Tiré esto para mostrar una alternativa a la respuesta ya dada. Puede haber casos en los que esta solución sea más adecuada. Puede haber casos en que la respuesta dada sea más adecuada. Pero una cosa es cierta, las alternativas siempre son buenas.
- 1. Cómo desenfocar un JTextField
- 2. cómo quitar MouseListener/ActionListener en un JTextField
- 3. Cómo borrar JTextField cuando el mouse hace clic en JTextField
- 4. Cómo convertir JTextField a String y String en JTextField?
- 5. ¿Cómo validar un pasaporte?
- 6. Personalizar javax.swing.JFileChooser para incluir un JTextField adicional
- 7. Swing JTextField cómo quitar el borde?
- 8. Cómo limpiar el JTextField haciendo clic JButton
- 9. Cómo alinear pares JLabel-JTextField verticalmente
- 10. Java, Swing: ¿cómo configuro el ancho máximo de un JTextField?
- 11. Caracteres alemanes en JTextField
- 12. JTextField: ¿Cómo limitar el número de charaters?
- 13. JTextField: Cómo configurar el texto a la izquierda de JTextField cuando el texto es demasiado largo
- 14. Problemas de JTextField con Numpad
- 15. Deseleccionar selección predeterminada en JTextfield
- 16. ¿Validar un esquema XSD?
- 17. Detectar introducir presionar en JTextField
- 18. Texto de ejemplo en JTextField
- 19. Java Swing de JTextField inserción
- 20. ¿Cómo "validar" un NSTimer después de invalidarlo?
- 21. Cómo validar un valor de firma SAML
- 22. ¿Cómo validar un correo electrónico en PHP?
- 23. Cómo validar GUID es un GUID
- 24. Validar un campo oculto
- 25. Validar subconjunto de un formulario utilizando jQuery Validar complemento
- 26. Decorar un JTextField con una imagen y sugerencia
- 27. ¿Cómo validar una matriz?
- 28. ¿Cómo validar Markdown?
- 29. ¿Mostrar evento para JTextField en Java?
- 30. JQuery Validar: Validar un formulario oculto (posible error)
Use 'BigDecimal' en su lugar y luego verifique el número de decimales con' scale() '. –
Gracias, he actualizado el código. –
Gracias por sus sugerencias y fragmentos de código. Trataré de avisarle en caso de que se desconecte – Chandu