Maison > Java > javaDidacticiel > Comment restreindre efficacement l'entrée JTextField aux seuls entiers ?

Comment restreindre efficacement l'entrée JTextField aux seuls entiers ?

Susan Sarandon
Libérer: 2024-12-09 07:06:09
original
863 Les gens l'ont consulté

How to Effectively Restrict JTextField Input to Only Integers?

Confiner l'entrée JTextField à des entiers

Restreindre l'entrée utilisateur à des entiers positifs dans un contrôle JTextField est un problème courant en programmation. Bien que vous ayez essayé d'utiliser un KeyListener à cette fin, il existe une approche plus efficace.

La mise en œuvre d'un DocumentFilter, par opposition à un KeyListener, offre plusieurs avantages :

  • Il garantit que toutes les données entrant dans le composant texte, quelle que soit la méthode de saisie utilisée (clavier, copier-coller, etc.), sont conformes aux spécifications spécifiées. critères.
  • Il permet une validation supplémentaire au-delà des simples contrôles de plage numérique, comme la validation du type de données (par exemple, en garantissant que les données saisies peuvent être analysées comme un entier) et la longueur des données (par exemple, en appliquant un nombre maximum de chiffres).

Pour implémenter cela à l'aide d'un DocumentFilter, considérez ce qui suit exemple :

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
            }
        }
    }
}
Copier après la connexion

Pour utiliser ce filtre, instanciez-le et définissez-le sur l'objet PlainDocument associé au JTextField :

JTextField textField = new JTextField();
PlainDocument doc = (PlainDocument) textField.getDocument();
doc.setDocumentFilter(new IntDocumentFilter());
Copier après la connexion

Cette implémentation :

  • Vérifie si la chaîne d'entrée peut être analysée comme un entier.
  • Permet l'insertion ou remplacement d'une entrée entière valide tout en ignorant toute entrée non entière.
  • Gère les cas où l'utilisateur tente d'insérer une chaîne nulle ou vide.

N'oubliez pas que ces techniques garantissent que l'entrée est conforme aux contraintes souhaitées, vous permettant de contrôler le type de données acceptées par le JTextField.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal