"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo limita JTextfield solo la entrada entero?

¿Cómo limita JTextfield solo la entrada entero?

Publicado el 2025-04-16
Navegar:907

How to Effectively Restrict JTextField Input to Only Integers?

confina la entrada de JTextfield a los enteros

restringir la entrada del usuario a enteros positivos en un control de JTextfield ha sido un problema común en la programación. Si bien ha intentado utilizar un keylistener para este propósito, hay un enfoque más efectivo.

permite una validación adicional más allá de las verificaciones de rango numérico, como validar el tipo de datos (por ejemplo, asegurar que los datos ingresados ​​puedan analizarse como un entero) y una longitud de datos (por ejemplo, hacer cumplir un número máximo de dígitos). Ejemplo:
  • import javax.swing.text.plaindocument; import javax.swing.text.documentfilter; import javax.swing.text.attributeset; import javax.swing.text.badlocationException; clase IntDocumentFilter extiende PlainDocument { @Anular Public void insertString (filterbypass fb, int offset, string string, atributeset attr) lanza BadLocationException { if (string == null || string.isEmpty ()) { super.insertString (fb, offset, string, attr); } demás { intentar { Integer.ParseInt (cadena); super.insertString (fb, offset, string, attr); } catch (numberFormateException e) { // advertir al usuario y no permita el inserto } } } @Anular Public void reemplazar (filterbypass fb, int offset, int longitud, texto de cadena, atributas de attrs) lanza BadLocationException { if (text == null || text.isEmpty ()) { super.replace (fb, compensación, longitud, texto, attrs); } demás { intentar { Integer.ParseInt (texto); super.replace (fb, compensación, longitud, texto, attrs); } catch (numberFormateException e) { // advertir al usuario y no permita el inserto } } } }
  • para usar este filtro, instanciarlo y establecerlo en el objeto PlainDocument asociado con el JTextField:
jTextField Textfield = new JTextField (); PlainDocument doc = (PlainDocument) TextField.getDocument (); doc.setDocumentFilter (new intDocumentFilter ());

esta implementación:
import javax.swing.text.PlainDocument;
import javax.swing.text.DocumentFilter;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;

class IntDocumentFilter extends PlainDocument {

    @Override
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {

        if (string == null || string.isEmpty()) {
            super.insertString(fb, offset, string, attr);
        } else {
            try {
                Integer.parseInt(string);
                super.insertString(fb, offset, string, attr);
            } catch (NumberFormatException e) {
                // warn the user and don't allow the insert
            }
        }
    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {

        if (text == null || text.isEmpty()) {
            super.replace(fb, offset, length, text, attrs);
        } else {
            try {
                Integer.parseInt(text);
                super.replace(fb, offset, length, text, attrs);
            } catch (NumberFormatException e) {
                // warn the user and don't allow the insert
            }
        }
    }
}

verifica si la cadena de entrada puede ser parsada como un entero.

JTextField textField = new JTextField();
PlainDocument doc = (PlainDocument) textField.getDocument();
doc.setDocumentFilter(new IntDocumentFilter());
El usuario intenta insertar una cadena nula o vacía.

    Recuerde, estas técnicas aseguran que la entrada se ajuste a las restricciones deseadas, lo que le permite controlar el tipo de datos aceptados por el JTextfield.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3