«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как только JTextfield ограничивает целочисленный вход?

Как только JTextfield ограничивает целочисленный вход?

Опубликовано в 2025-04-16
Просматривать:728

How to Effectively Restrict JTextField Input to Only Integers?

ограничивающий ввод Jtextfield в целые числа

. Ограничение ввода пользователя положительными целыми числами в управлении JTextfield было общей проблемой в программировании. Хотя вы пытались использовать ключевой список для этой цели, существует более эффективный подход.

реализация документногофильтера, в отличие от того, чтобы полагаться на KeyListener, предлагает несколько преимуществ:

  • , это гарантирует, что все данные, введенные в текстовый компонент, независимо от входного метода, ввод, и т. Д. Критерии.
  • . javax.swing.text.plaindocument; импортировать javax.swing.text.documentfilter; Импорт javax.swing.text.attributeSet; импортировать javax.swing.text.badlocationException; класс Intdocumentfilter Exters PlainDocument { @Override Public void InsertString (FilterBypass FB, Int Offset, String String, ATTRIBUTESTET) бросает BadlocationException { if (string == null || string.isempty ()) { Super.insertString (FB, Offset, String, ATTR); } еще { пытаться { Integer.parseint (String); Super.insertString (FB, Offset, String, ATTR); } catch (numberFormateXception e) { // предупреждают пользователя и не допускайте вставку } } } @Override public void заменить (FilterBypass FB, int offset, int длина, строковый текст, атрибута атрибута) бросает BadlocationException { if (text == null || text.isempty ()) { Super.Replace (FB, смещение, длина, текст, атрис); } еще { пытаться { Integer.parseint (текст); Super.Replace (FB, смещение, длина, текст, атрис); } catch (numberFormateXception e) { // предупреждают пользователя и не допускайте вставку } } } }
для использования этого фильтра создайте его и установите на объекте PlainDocument, связанный с 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
            }
        }
    }
}
Эта реализация:

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

помните, эти методы гарантируют, что ввод соответствует желаемым ограничениям, что позволяет вам управлять типом данных, принятых Jextfield.
    Последний учебник Более>

    Изучайте китайский

    Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

    Copyright© 2022 湘ICP备2022001581号-3