最好的Formatter来显示可编辑的整数数组? (可能从0开始)

时间:2014-09-14 17:50:00

标签: java swing text formatting

我使用JFormattedTextField作为其容器。我不知道如何使用NumbeFormatter做到这一点,它将所有内容转换为int,所以..是的。无法使用MaskFormatter真正做到这一点,它强制输入适合原始蒙版,在我的情况下是8位数(" ########")。任意数量的数字(最多8个)应该没问题。请帮忙。

编辑:

enter image description here

1 个答案:

答案 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;
    }
}