java - 使用 JFormattedTextField(NumberFormat.getIntegerInstance()) 时出错;
问题描述
当我尝试使用时遇到问题:
JFormattedTextField(NumberFormat.getIntegerInstance());
当我将数字放入数字框时,我收到一个错误,即我输入的数字是错误的,因为数字之间有一个空格,如下所示:200 000
当数字是200000
我没有错误时。
解决方案
您可以MaskFormatter
按照如何使用格式化文本字段中的说明使用 a 以避免获取非数字字符:
JFormattedTextField textField = new JFormattedTextField(new MaskFormatter("#######"));
但是,如果您使用这种方式,当您复制粘贴文本200 000
时,它要么不会被粘贴,要么只会粘贴 200 个。(空格后的其余部分 - 非数字字符将被忽略)
为了允许这样做,您必须使用仅保留数字的文档过滤器。因此,当输入带有空间200 000
时,它将保持200000
:
class NumberOnlyDocumentFilter extends DocumentFilter {
@Override
public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
throws BadLocationException {
super.insertString(fb, offset, keepOnlyDigits(string), attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs)
throws BadLocationException {
super.replace(fb, offset, length, keepOnlyDigits(text), attrs);
}
private String keepOnlyDigits(String text) {
StringBuilder sb = new StringBuilder();
for (char c : text.toCharArray())
if (Character.isDigit(c))
sb.append(c);
return sb.toString();
}
}
并“安装”它:
JTextField textField = new JTextField();
AbstractDocument document = (AbstractDocument) textField.getDocument();
document.setDocumentFilter(new NumberOnlyDocumentFilter());
推荐阅读
- node.js - NodeJS 创建一个像 youtube 视频一样的故事书?
- mongodb-query - 我想查询 mongodb 中的双重嵌套日期
- vb.net - 如何按行值对 Datatable 进行排序?
- typescript - 做什么
(构造函数:T)在打字稿中是什么意思? - python - TypeError: filter_by() 接受 1 个位置参数,但给出了 2 个
- javascript - 无法执行 React 状态更新
- google-chrome - 无法在 Chrome 上登录 Bitbucket
- python - 如何抓取网页的其他页面
- python - 乘法表(“时间表”)中的 Python 素数检查器
- ios - iOS Fido2 BLE 身份验证器注册响应问题