设置JTextField只能输入1到10的整数
时间: 2024-02-28 22:55:19 浏览: 35
您可以使用 DocumentFilter 来实现 JTextField 只能输入 1 到 10 的整数。DocumentFilter 是一个用于限制文本输入的过滤器,它可以截获用户输入的文本并将其过滤为符合要求的格式。以下是一个简单的实现示例:
```java
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.JTextField;
public class IntegerFilter extends DocumentFilter {
public void insertString(FilterBypass fb, int offset, String str, AttributeSet attr) throws BadLocationException {
StringBuilder sb = new StringBuilder(fb.getDocument().getText(0, fb.getDocument().getLength()));
sb.insert(offset, str);
if (isValidInteger(sb.toString())) {
super.insertString(fb, offset, str, attr);
}
}
public void replace(FilterBypass fb, int offset, int length, String str, AttributeSet attrs) throws BadLocationException {
StringBuilder sb = new StringBuilder(fb.getDocument().getText(0, fb.getDocument().getLength()));
sb.replace(offset, offset + length, str);
if (isValidInteger(sb.toString())) {
super.replace(fb, offset, length, str, attrs);
}
}
private boolean isValidInteger(String str) {
if (str.equals("") || str.equals("-")) {
return true;
}
try {
int val = Integer.parseInt(str);
return (val >= 1 && val <= 10);
} catch (NumberFormatException ex) {
return false;
}
}
}
// 使用方法:
JTextField textField = new JTextField();
textField.setDocument(new IntegerFilter());
```
在上面的示例中,我们创建了一个名为 IntegerFilter 的类,并将其设置为 JTextField 的 DocumentFilter。在 insertString() 和 replace() 方法中,我们检查将要插入或替换的字符串是否符合要求,如果符合,则调用父类的相应方法。isValidInteger() 方法用于检查一个字符串是否为 1 到 10 的整数,它首先检查字符串是否为空或为负号,然后尝试将其转换为整数并检查范围。在 JTextField 中使用 IntegerFilter 只需要将其设置为 DocumentFilter 即可。