2015-02-06 4 views
0

У меня есть следующие JFormattedTextFieldФорматирование JTextField принять три цифры в лучшем случае, но ничего до 1-3 цифры могут быть набраны

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 принимать максимум три цифры, но текстовое поле будет принимать только одну цифру и двузначные цифры.

+0

Вместо этого используйте 'JSpinner' с' SpinnerNumberModel'. –

+1

Пожалуйста, изучите общую номенклатуру Java (соглашения об именах - например, 'EveryWordUpperCaseClass',' firstWordLowerCaseMethod() ',' firstWordLowerCaseAttribute', если это не 'CONSTANT_ALL_UPPER') и использовать ее последовательно. И не игнорируйте исключения, он вернется, чтобы укусить вас в ягодицах. –

ответ

2

Вот простой пример использования 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 ответ на больше возможностей.