📅  最后修改于: 2023-12-03 15:08:16.643000             🧑  作者: Mango
在使用 Java Swing 编写图形界面时,我们经常需要使用 JTextField 组件,它允许用户在其文本框中输入文本。但是,在某些情况下,我们希望该文本框只接受数字输入,这时该怎么做呢?
一个简单的方法是使用 JFormattedTextField 组件。它可以使用 NumberFormatter 类将输入限制为数字。
NumberFormatter formatter = new NumberFormatter();
JFormattedTextField textField = new JFormattedTextField(formatter);
上面的代码将创建一个只接受数字的 JFormattedTextField。
另一个方法是实现 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 组件。但是,如果您需要更复杂的限制逻辑,则应使用第二种方法。