我使用JFormattedTextField作为其容器。我不知道如何使用NumbeFormatter做到这一点,它将所有内容转换为int,所以..是的。无法使用MaskFormatter真正做到这一点,它强制输入适合原始蒙版,在我的情况下是8位数(" ########")。任意数量的数字(最多8个)应该没问题。请帮忙。
编辑:
答案 0 :(得分:2)
“是的,只允许数字,即使那些第一个字符为0,且大小为最大8”
只需使用DocumentFilter
(对于文本字段的基础文档)过滤掉不是数字的任何内容,并过滤掉导致文本字段文档长度超过8的任何内容。
这是一个例子
import java.awt.GridLayout;
import javax.swing.*;
import javax.swing.text.*;
public class TestFieldToArray {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
final JTextField field = getFilteredField();
final JTextField field2 = getFilteredField();
JPanel panel = new JPanel(new GridLayout(0, 1));
panel.add(field);
panel.add(field2);
JOptionPane.showMessageDialog(null, panel);
}
});
}
static JTextField getFilteredField() {
JTextField field = new JTextField(15);
AbstractDocument doc = (AbstractDocument) field.getDocument();
doc.setDocumentFilter(new DocumentFilter() {
private final int maxChars = 8;
@Override
public void replace(FilterBypass fb, int offs, int length,
String str, AttributeSet a) throws BadLocationException {
int docLength = fb.getDocument().getLength();
if (docLength < maxChars) {
super.replace(fb, offs, length,
str.replaceAll("[^0-9]+", ""), a);
}
}
@Override
public void insertString(FilterBypass fb, int offs, String str,
AttributeSet a) throws BadLocationException {
int docLength = fb.getDocument().getLength();
if (docLength < maxChars) {
super.insertString(fb, offs,
str.replaceAll("[^0-9]+", ""), a);
}
}
});
return field;
}
}