Search code examples
javaswingjtextfieldjformattedtextfield

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


I have the following 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 is formatted to only allow three digits to be inputted within the text field. However, I want it so that the user can also enter a single digit as well. I.e. the user may enter 1,15, or 100. But with the code above, the text field only allows three digits to be entered, if I enter a single digit within the text field, it automatically clears.

How do I allow CabinNoTextField to accept three digits at most, but the text field will accept a single digit and double digits as well.


Solution

  • Use a 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