„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie begrenzt JTextField die Ganzzahl -Eingabe nur?

Wie begrenzt JTextField die Ganzzahl -Eingabe nur?

Gepostet am 2025-04-16
Durchsuche:954

How to Effectively Restrict JTextField Input to Only Integers?

beschränken JTextField Eingabe in Integers

die Eingabe von Benutzern auf positive ganze ganze Zahlen in einem jTextField -Steuerelement war ein häufiges Problem in der Programmierung. Während Sie zu diesem Zweck versucht haben, einen KeyListener zu verwenden, gibt es einen effektiveren Ansatz.

implementieren einen Dokumentfilter, anstatt sich auf einen KeyListener zu verlassen, bietet mehrere Vorteile:

  • IT sorgt dafür, dass alle Daten, die die Textkomponent, die zu den verwendeten Methoden, die Datenkomponent, die zu den verwendeten Methoden, (die von der Art und Weise verwendeten, (Schlüsselkomponenten), die der verwendeten Methode, (Schlüsselkomponent, usw., usw., usw., usw., usw., usw. Kriterien.
  • Es ermöglicht eine zusätzliche Validierung über die nur numerischen Reichweite, wie z. B. den Datentyp (z. B. sicherzustellen, dass die eingegebenen Daten als Ganzzahl analysiert werden können) und Datenlänge (z. B. Durchsetzung einer maximalen Anzahl von Ziffern). javax.swing.text.plaNDocument; importieren javax.swing.text.documentFilter; importieren javax.swing.text.attributeset; importieren javax.swing.text.badlocationException; Klasse intdocumentFilter erweitert das PlainDocument { @Override public void InsertString (Filterbypass FB, Int Offset, String String, Attributeet Attr) löst BadLocationException {aus { if (string == null || string.isempty ()) { Super.insertString (FB, Offset, String, Attr); } anders { versuchen { Integer.ParseInt (String); Super.insertString (FB, Offset, String, Attr); } catch (numberFormatexception e) { // Warnen Sie den Benutzer und lassen Sie den Einfügen nicht zu } } } @Override public void ersetzen (filterbypass fb, int offset, int länge, string text, Attributeet attrs) löscht BadLocationException { if (text == null || text.isempty ()) { Super.Replace (FB, Offset, Länge, Text, Attrs); } anders { versuchen { Integer.ParseInt (Text); Super.Replace (FB, Offset, Länge, Text, Attrs); } catch (numberFormatexception e) { // Warnen Sie den Benutzer und lassen Sie den Einfügen nicht zu } } } }
, um diesen Filter zu verwenden, ihn zu instanziieren und auf das PlainDocument -Objekt zu setzen, das dem jTextfield zugeordnet ist:

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
            }
        }
    }
}
Diese Implementierung:

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

Denken Sie daran, dass diese Techniken sicherstellen, dass die Eingabe den gewünschten Einschränkungen entspricht, sodass Sie die vom JTextField akzeptierte Datenstyp steuern können.
    Neuestes Tutorial Mehr>

    Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

    Copyright© 2022 湘ICP备2022001581号-3