📅  最后修改于: 2023-12-03 14:42:15.418000             🧑  作者: Mango
在Java Netbeans中,我们可以使用JTextField来获取用户输入。但是,有时候我们希望用户仅输入数字。这篇文章将介绍如何在Java Netbeans中使用JTextField创建一个仅接受数字的文本框。
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来过滤用户的输入,并使用正则表达式来检查用户输入的内容是否只包含数字。