首页 >Java >java教程 >如何有效地将 JTextField 输入限制为仅整数?

如何有效地将 JTextField 输入限制为仅整数?

Susan Sarandon
Susan Sarandon原创
2024-12-09 07:06:09865浏览

How to Effectively Restrict JTextField Input to Only Integers?

将 JTextField 输入限制为整数

在 JTextField 控件中将用户输入限制为正整数一直是编程中的常见问题。虽然您尝试使用 KeyListener 来实现此目的,但还有一种更有效的方法。

与依赖 KeyListener 相比,实现 DocumentFilter 具有以下几个优点:

  • 它确保输入文本组件的所有数据,无论使用何种输入方法(键盘、复制粘贴等),都符合指定的
  • 除了数字范围检查之外,它还允许进行其他验证,例如验证数据类型(例如,确保输入的数据可以解析为整数)和数据长度(例如,强制执行最大数量的数据)数字)。

要使用 DocumentFilter 实现此目的,请考虑以下内容示例:

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 关联的 PlainDocument 对象上:

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

此实现:

  • 检查输入字符串是否可以解析为整数。
  • 允许插入或替换有效的整数输入,同时忽略任何非整数输入。
  • 处理用户尝试插入 null 或空字符串的情况。

请记住,这些技术可确保输入符合所需的约束,允许您控制 JTextField 接受的数据类型。

以上是如何有效地将 JTextField 输入限制为仅整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn