📜  java netbeans textfield only numbers - Java (1)

📅  最后修改于: 2023-12-03 14:42:15.418000             🧑  作者: Mango

Java Netbeans Textfield Only Numbers - Java

在Java Netbeans中,我们可以使用JTextField来获取用户输入。但是,有时候我们希望用户仅输入数字。这篇文章将介绍如何在Java Netbeans中使用JTextField创建一个仅接受数字的文本框。

使用DocumentFilter

Java提供了一个名为DocumentFilter的类,它可以在文本添加到Document之前扫描并修改文本。我们可以利用这个特性来限制用户输入的内容。

首先,我们需要创建一个类来实现DocumentFilter。以下代码演示了如何创建一个仅接受数字的DocumentFilter:

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class NumberOnlyFilter extends DocumentFilter {
    @Override
    public void insertString(FilterBypass fb, int offset, String string,
            AttributeSet attr) throws BadLocationException {
        if (string.matches("\\d+")) {
            super.insertString(fb, offset, string, attr);
        }
    }

    @Override
    public void replace(FilterBypass fb, int offset, int length, String text,
            AttributeSet attrs) throws BadLocationException {
        if (text.matches("\\d+")) {
            super.replace(fb, offset, length, text, attrs);
        }
    }
}

这个类覆盖了DocumentFilter的insertString和replace方法。当用户输入文本时,insertString方法将被调用。我们使用正则表达式来检查用户输入的内容是否只包含数字。如果是,我们才会调用父类的insertString方法将文本添加到Document中。

当用户替换文本时,replace方法将被调用。与insertString相同,我们将使用正则表达式检查用户输入的内容是否只包含数字。如果是,我们才会调用父类的replace方法将文本替换为新文本。

接下来,我们需要将这个过滤器应用到JTextField。以下代码演示了如何使用NumberOnlyFilter创建一个JTextField:

import javax.swing.JFrame;
import javax.swing.JTextField;

public class NumberTextFieldTest {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextField textField = new JTextField();
        textField.setDocument(new NumberOnlyFilter());
        frame.add(textField);

        frame.pack();
        frame.setVisible(true);
    }
}

这个例子创建了一个JFrame,并将一个新的JTextField添加到JFrame中。然后,我们调用textField的setDocument方法,并将NumberOnlyFilter的实例作为参数传递给它。这将使JTextField使用我们刚才创建的过滤器来过滤用户的输入。

综合示例

最终的代码如下:

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class NumberTextFieldTest {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JTextField textField = new JTextField();
        textField.setDocument(new NumberOnlyFilter());
        frame.add(textField);

        frame.pack();
        frame.setVisible(true);
    }

    private static class NumberOnlyFilter extends DocumentFilter {
        @Override
        public void insertString(FilterBypass fb, int offset, String string,
                AttributeSet attr) throws BadLocationException {
            if (string.matches("\\d+")) {
                super.insertString(fb, offset, string, attr);
            }
        }

        @Override
        public void replace(FilterBypass fb, int offset, int length, String text,
                AttributeSet attrs) throws BadLocationException {
            if (text.matches("\\d+")) {
                super.replace(fb, offset, length, text, attrs);
            }
        }
    }
}

这个示例演示了如何在Java Netbeans中创建一个仅接受数字的文本框。我们使用DocumentFilter来过滤用户的输入,并使用正则表达式来检查用户输入的内容是否只包含数字。