jtextfield限定数据类型
时间: 2023-11-15 15:54:50 浏览: 79
可以使用 javax.swing.text.DocumentFilter 来限制 JTextField 输入的数据类型,具体步骤如下:
1. 自定义一个 DocumentFilter 的实现类,重写 insertString 和 replace 方法,在这些方法中可以根据需要对输入的文本进行过滤或转换。
2. 创建一个 PlainDocument 类的实例,并将自定义的 DocumentFilter 设置到实例中。
3. 将 PlainDocument 实例设置到 JTextField 中。
以下是一个限制只能输入数字的示例代码:
```
import javax.swing.JTextField;
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 {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
char ch = string.charAt(i);
if (Character.isDigit(ch)) {
sb.append(ch);
}
}
super.insertString(fb, offset, sb.toString(), attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attrs)
throws BadLocationException {
if (string == null) {
super.replace(fb, offset, length, string, attrs);
return;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < string.length(); i++) {
char ch = string.charAt(i);
if (Character.isDigit(ch)) {
sb.append(ch);
}
}
super.replace(fb, offset, length, sb.toString(), attrs);
}
public static void main(String[] args) {
JTextField textField = new JTextField();
PlainDocument doc = new PlainDocument();
doc.setDocumentFilter(new NumberOnlyFilter());
textField.setDocument(doc);
}
}
```
阅读全文