"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment Jtextfield limite-t-il l'entrée entier uniquement?

Comment Jtextfield limite-t-il l'entrée entier uniquement?

Publié le 2025-04-16
Parcourir:885

How to Effectively Restrict JTextField Input to Only Integers?

Configurer la entrée jTextField aux entiers

restreindre l'entrée de l'utilisateur à des entiers positifs dans un contrôle JTextField a été un problème courant dans la programmation. Bien que vous ayez tenté d'utiliser un KeyListener à cet effet, il existe une approche plus efficace. critères.

Il permet une validation supplémentaire au-delà des vérifications de plage numérique, telles que 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, appliquant un nombre maximum de chiffres).

  • Exemple:
  • Importer javax.swing.text.plainDocument; Importer javax.swing.text.DocumentFilter; Importer javax.swing.text.attributeset; import javax.swing.text.badlocationException; classe IntDocumentFilter étend PlainDocument { @Outrepasser public void insertString (filterByPass fb, int offset, chaîne de chaîne, attributeset att) lève badLocationException { if (string == null || string.isempty ()) { super.insertString (fb, offset, String, atTr); } autre { essayer { Integer.ParseInt (String); super.insertString (fb, offset, String, atTr); } catch (NumberFormatexception e) { // avertissez l'utilisateur et n'autorise pas l'insert } } } @Outrepasser public void remplace (filterByPass fb, int offset, intyl, longueur, texte de chaîne, attributeSet attrs) lève badLocationException { if (text == null || text.isempty ()) { super.replace (fb, décalage, longueur, texte, attrs); } autre { essayer { Integer.ParseInt (texte); super.replace (fb, décalage, longueur, texte, attrs); } catch (NumberFormatexception e) { // avertissez l'utilisateur et n'autorise pas l'insert } } } }
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 ());
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
            }
        }
    }
}
Cette implémentation:

JTextField textField = new JTextField();
PlainDocument doc = (PlainDocument) textField.getDocument();
doc.setDocumentFilter(new IntDocumentFilter());

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é par le jtexfield.
    Dernier tutoriel Plus>

    Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

    Copyright© 2022 湘ICP备2022001581号-3