Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 显示可编辑整数数组的最佳格式化程序?(可能以0开头)_Java_Swing_Text_Formatting - Fatal编程技术网

Java 显示可编辑整数数组的最佳格式化程序?(可能以0开头)

Java 显示可编辑整数数组的最佳格式化程序?(可能以0开头),java,swing,text,formatting,Java,Swing,Text,Formatting,我使用JFormattedTextField作为其容器。我不知道如何使用NumberFormatter,它会将所有内容转换为int,所以。。是 啊也不能用MaskFormatter实现,它强制输入与原始掩码匹配,在我的例子中是8位(“#######”)。任何位数(最多8位)都可以。请帮忙 编辑: 是,仅允许数字,即使是第一个字符为0且最大值为8的数字 只需使用a(用于文本字段的基础文档)即可过滤掉不是数字的任何内容,也可以过滤掉导致文本字段文档长度超过8的任何内容 这里有一个例子 import

我使用JFormattedTextField作为其容器。我不知道如何使用NumberFormatter,它会将所有内容转换为int,所以。。是 啊也不能用MaskFormatter实现,它强制输入与原始掩码匹配,在我的例子中是8位(“#######”)。任何位数(最多8位)都可以。请帮忙

编辑:

是,仅允许数字,即使是第一个字符为0且最大值为8的数字

只需使用a(用于文本字段的基础文档)即可过滤掉不是数字的任何内容,也可以过滤掉导致文本字段文档长度超过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;
    }
}
导入java.awt.GridLayout;
导入javax.swing.*;
导入javax.swing.text.*;
公共类TestFieldToArray{
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
最终JTextField字段=getFilteredField();
最终JTextField2=getFilteredField();
JPanel面板=新JPanel(新网格布局(0,1));
面板。添加(字段);
面板。添加(字段2);
showMessageDialog(空,面板);
}
}); 
}
静态JTextField getFilteredField(){
JTextField=新的JTextField(15);
AbstractDocument文档=(AbstractDocument)字段.getDocument();
doc.setDocumentFilter(新的DocumentFilter(){
专用最终整数maxChars=8;
@凌驾
公共无效替换(过滤器旁路fb、整型关闭、整型长度、,
字符串str,AttributeSet a)引发BadLocationException{
int docLength=fb.getDocument().getLength();
if(docLength
什么是“8位数”和“任意位数”?如果你不需要整数,你需要什么?我需要一个整数数组。什么是“可编辑整数数组”以及它在文本字段中的显示(或与文本字段有什么关系)?所以基本上你只需要一个只允许数字和最多8的测试字段?它看起来完全像一个正常的整数值,但逻辑上数字没有连接,允许0作为第一个数字。它在技术上也可以作为字符串使用,格式化程序会不断检查字符是否为数字(character.isDigit()~“#”掩码)。但是MaskFormatter中有一个静态的字符数,它不能调整大小,这就是问题所在。效果很好,现在我想知道如何找出每3个字符之间的空格。如果它有焦点就没有空间,如果它失去焦点就有空间,嗯。我真的不知道“挑选空间”是什么意思。据我所知,空间是不允许的。我用一张小图片更新了我的asnwer。NumberFormat有一个方便的方法来清除这些空格,但不知道在直接修改文档时如何使用。不知道你做错了什么。我上面的新代码没有做到这一点,我使用的是JFormattedTextField,在这里我更改它的文档如下:
surviveText.setDocument(setRuleDoc(surviveText.getDocument())对ur方法稍加修改:
私有抽象文档setRuleDoc(Document dc){etc}
实际上这并没有真正起作用,如果位数超过最大值,我会得到非常奇怪的数字,负数和2147483647。不管怎样,我很感激你的帮助,我只是想找到一个解决办法。