MaskFormatter可以采用任何尺寸,或仅提供您提供的尺寸吗?

时间:2014-09-03 01:19:19

标签: java swing jformattedtextfield maskformatter

我想将输入限制在我的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");
           }
        }
    });

1 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,你可以编写一个类似......的方法。

public static String generateFormat(char with, int count) {
    return String.format("%" + count + "s", "").replaceAll(" ", Character.toString(with));
}

基本上,这将允许您执行的操作是生成String,其中with填充count个字符,如... {/ p>

leftMask = new MaskFormatter(generateFormat('L', 5));

现在,这不是一个完美的解决方案,更好的解决方案可能是使用DocumentFilter,这将让您完全控制用户可以实时输入的数量和内容......

有关详细信息,请查看Implementing a Document FilterDocumentFilter Examples