格式化JTextField最多可以接受三位数字,但可以输入最多1-3位数字

时间:2015-02-06 21:52:57

标签: java swing jtextfield jformattedtextfield

我有以下JFormattedTextField

try {
    MaskFormatter CabinNoTextF = new MaskFormatter("###");
    CabinNoTextF.setPlaceholderCharacter(' ');
    CabinNoTextField = new JFormattedTextField(CabinNoTextF);
    centerPanelCabin.add(CabinNoTextField);
    addCabinF.add(centerPanelCabin);
    addCabinF.setVisible(true);
} catch (Exception ex) {
}

CabinNoTextField格式化为仅允许在文本字段中输入三位数。但是,我想要它,以便用户也可以输入一个数字。即用户可以输入1,15或100.但是使用上面的代码,文本字段只允许输入三个数字,如果我在文本字段中输入一个数字,它会自动清除。

如何允许CabinNoTextField最多接受三位数,但文本字段也会接受一位数和两位数。

2 个答案:

答案 0 :(得分:3)

使用NumberFormat

NumberFormat amountFormat = NumberFormat.getNumberInstance();
amountFormat.setMinimumIntegerDigits(1);
amountFormat.setMaximumIntegerDigits(3);
amountFormat.setMaximumFractionDigits(0);

amountField = new JFormattedTextField(amountFormat);

http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html

答案 1 :(得分:2)

以下是使用InputVerifier的简单示例:

JFormattedTextField f = new JFormattedTextField();
f.setInputVerifier(new InputVerifier() {
    @Override
    public boolean verify(JComponent input) {
        String text = ((JTextComponent) input).getText();
        return text.length() < 4 && StringUtil.isNumeric(text); // or use a regex
    }
});

检查this答案以了解更多可能性。