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

非 Y 不嫁゛ 提交于 2019-12-12 03:08:11

问题


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.


回答1:


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




回答2:


Here's a simple example using 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
    }
});

Check this answer for more possibilities.



来源:https://stackoverflow.com/questions/28375432/formatting-jtextfield-to-accept-three-digits-at-most-but-anything-up-to-1-3-dig

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!