Форматирование JTextField позволяет принять не более трех цифр, но можно ввести до 1-3 цифр.

У меня есть следующий 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 ответа

Решение

Использовать 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
    }
});

Проверьте этот ответ для большего количества возможностей.

Другие вопросы по тегам