Maison > Java > javaDidacticiel > Comment puis-je restreindre un JTextField pour qu'il n'accepte que des entiers positifs ?

Comment puis-je restreindre un JTextField pour qu'il n'accepte que des entiers positifs ?

Mary-Kate Olsen
Libérer: 2024-12-26 13:41:09
original
610 Les gens l'ont consulté

How Can I Restrict a JTextField to Accept Only Positive Integers?

Limiter l'entrée JTextField à des entiers

La tâche consistant à restreindre l'entrée JTextField pour n'accepter que des entiers positifs est un besoin fréquemment rencontré, mais la mise en œuvre de cette restriction peut poser des défis. L'utilisation d'un KeyListener à cette fin, comme tenté initialement, présente plusieurs inconvénients.

Inconvénients de l'utilisation d'un KeyListener :

  • Impossible de capturer toutes les entrées : Un KeyListener ne détecte que les frappes au clavier, mais il ne gérera pas les données saisies par copier-coller, ce qui peut contourner le restriction.
  • Contrôle de bas niveau : Les KeyListeners fonctionnent à un faible niveau d'abstraction, ce qui les rend moins adaptés aux applications Swing.

La solution : DocumentFilter

Une meilleure approche consiste à utiliser un DocumentFilter. Ce composant Swing vous permet de filtrer le contenu d'un composant texte, offrant un contrôle précis sur ce qui peut être saisi.

Comment ça marche :

Un DocumentFilter vous permet de inspectez toutes les modifications entrantes dans le contenu du composant texte. En vérifiant si la chaîne modifiée représente un entier valide, vous pouvez accepter ou rejeter la modification.

Exemple d'implémentation :

L'extrait de code suivant montre comment implémenter un DocumentFilter qui restreint la saisie aux entiers :

import javax.swing.text.DocumentFilter;
import javax.swing.text.BadLocationException;

public class MyIntFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string,
                            AttributeSet attr) throws BadLocationException {
        Document doc = fb.getDocument();
        StringBuilder sb = new StringBuilder();
        sb.append(doc.getText(0, doc.getLength()));
        sb.insert(offset, string);

        if (test(sb.toString())) {
            super.insertString(fb, offset, string, attr);
        } else {
            // Handle invalid input, e.g., display an error message
        }
    }

    private boolean test(String text) {
        try {
            Integer.parseInt(text);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}
Copier après la connexion

En attachant ce DocumentFilter à votre JTextField, vous pouvez vous assurer que seuls les entiers valides sont autorisés en entrée.

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