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

Formatting JTextField to accept three digits at most, but anything up to 1-3 digits can be typed

我有以下 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 被格式化为仅允许在文本字段中输入三位数字。但是,我想要它以便用户也可以输入一个数字。 IE。用户可以输入 1,15 或 100。但是使用上面的代码,文本字段只允许输入三个数字,如果我在文本字段中输入一个数字,它会自动清除。

如何让 CabinNoTextField 最多接受三位数字,但文本字段也可以接受一位和两位数。

使用 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

这是一个使用 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 答案以获得更多可能性。