📜  如何使 jtextfield 只接受数字 (1)

📅  最后修改于: 2023-12-03 15:08:16.643000             🧑  作者: Mango

如何使 JTextField 只接受数字

在使用 Java Swing 编写图形界面时,我们经常需要使用 JTextField 组件,它允许用户在其文本框中输入文本。但是,在某些情况下,我们希望该文本框只接受数字输入,这时该怎么做呢?

方法1:使用 JFormattedTextField

一个简单的方法是使用 JFormattedTextField 组件。它可以使用 NumberFormatter 类将输入限制为数字。

NumberFormatter formatter = new NumberFormatter();
JFormattedTextField textField = new JFormattedTextField(formatter);

上面的代码将创建一个只接受数字的 JFormattedTextField。

方法2:实现 DocumentFilter

另一个方法是实现 DocumentFilter 接口。该接口提供了 three methods 来修改组件中包含的文本。我们可以通过使用该接口来约束文本框中输入的字符为数字。

JTextField textField = new JTextField();
AbstractDocument document = (AbstractDocument) textField.getDocument();
document.setDocumentFilter(new DocumentFilter() {
    @Override
    public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {
        if (string == null) {
            return;
        }
        if (acceptsOnlyNumbers(string)) {
            super.insertString(fb, offset, string, attr);
        }
    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
        if (text == null) {
            return;
        }
        if (acceptsOnlyNumbers(text)) {
            super.replace(fb, offset, length, text, attrs);
        }
    }

    private boolean acceptsOnlyNumbers(String string) {
        for (int i = 0; i < string.length(); i++) {
            if (!Character.isDigit(string.charAt(i))) {
                return false;
            }
        }
        return true;
    }
});

上面的代码将创建一个 Textfield,并将其限制为只接受数字字符。

总结

本文介绍了两种限制 JTextField 中输入数字字符的方法,第一个方法可以使用简单的 numberFormatter。第二种方法是使用 DocumentFilter 接口实现。

建议使用第一种方法,它更简单并且依赖于标准的 Java 组件。但是,如果您需要更复杂的限制逻辑,则应使用第二种方法。