当我尝试使用时遇到问题:
JFormattedTextField(NumberFormat.getIntegerInstance());
当我将数字放入数字框中时,我收到错误消息,因为数字之间有空格,如下所示:200 000
并且当数字输入时,我输入的数字错误是 200000
我没有收到任何错误。
最佳答案
您可以使用 MaskFormatter
,如 How to use Formatted Text Field 中所述。为了避免获得非数字字符:
JFormattedTextField textField = new JFormattedTextField(new MaskFormatter("#######"));
但是,如果您使用这种方式,当您复制粘贴文本200 000
时,它要么不会被粘贴,要么只会粘贴200。 (空格后的其余部分 - 非数字字符将被忽略)
为了允许此操作,您必须使用 a Document Filter只保留数字。因此,当输入带有空格 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());
关于java - 使用 JFormattedTextField(NumberFormat.getIntegerInstance()) 时出错;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369782/