Форматирование 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
}
});
Проверьте этот ответ для большего количества возможностей.