Java MaskFormatter可以采用任何尺寸,还是仅采用您提供的尺寸?

Java MaskFormatter可以采用任何尺寸,还是仅采用您提供的尺寸?,java,swing,jformattedtextfield,maskformatter,Java,Swing,Jformattedtextfield,Maskformatter,我想将输入限制在我的JFormattedTextField,我有一个使用MaskFormatter的设置 但是,我必须输入指定的字符数(在本例中为5)。有没有一种方法可以让它接受任何大小的输入,并且仍然将输入限制为小写字符?或者我应该为我的目的使用不同的类 下面是我目前拥有的 我的目标是有两个文本框输入,并比较它们之间的文本输入 //This formatter allows for up to a 10 character word. //No spaces allowed.

我想将输入限制在我的
JFormattedTextField
,我有一个使用
MaskFormatter
的设置

但是,我必须输入指定的字符数(在本例中为5)。有没有一种方法可以让它接受任何大小的输入,并且仍然将输入限制为小写字符?或者我应该为我的目的使用不同的类

下面是我目前拥有的

我的目标是有两个文本框输入,并比较它们之间的文本输入

//This formatter allows for up to a 10 character word.
    //No spaces allowed.
    MaskFormatter leftMask = null;
    try {
        leftMask = new MaskFormatter("LLLLL");
        leftMask.setInvalidCharacters("1234567890 ");
        leftMask.setOverwriteMode(false);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    MaskFormatter rightMask = null;
    try {
        rightMask = new MaskFormatter("LLLLL");
        rightMask.setInvalidCharacters("1234567890 ");
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //Initialize components
    leftTextField = new JFormattedTextField(leftMask);
    rightTextField = new JFormattedTextField(rightMask);
    submitButton = new JButton("Submit");

    submitButton.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {
           InputReader reader = new InputReader();
           result.setText("These two strings are:");
           if(reader.readInput(leftTextField.getText(), rightTextField.getText())){
               result.append(" a match");
           }
           else{
               result.append(" not a match");
           }
        }
    });

如果我理解正确的话,你可以写一个方法,比如

public static String generateFormat(char with, int count) {
    return String.format("%" + count + "s", "").replaceAll(" ", Character.toString(with));
}
leftMask = new MaskFormatter(generateFormat('L', 5));
基本上,这将允许您生成一个
字符串
,填充
的值,并使用
字符进行计数,类似于

public static String generateFormat(char with, int count) {
    return String.format("%" + count + "s", "").replaceAll(" ", Character.toString(with));
}
leftMask = new MaskFormatter(generateFormat('L', 5));
现在,这不是一个完美的解决方案,更好的解决方案可能是使用
DocumentFilter
,它可以让您完全控制用户可以实时输入的数量和内容


查看和了解更多详细信息。

因此,尽管此方法有效,MaskFormatter仍然要求输入的字符必须全部为5个(或您选择的任何数字)。如果不是,它就是不接受输入。我的问题是它应该接受输入,不管它是否是最大字符数。我也会看看你提供的链接。谢谢你的回复!这就是为什么我要转储格式化字段并使用JTextField和DocumentFilter