Как использовать JFormattedTextfield для принятия имен, таких как строки?
Что будет FormatterFactory
значение фактора в JFormattedTextField
если я только хочу принимать буквы и пробелы.
Потому что я хочу, чтобы он принимал только имена. Подобно - John Doe
,
1 ответ
Я не мог найти элегантный способ, используя форматтер. Не элегантный способ заключается в создании MaskFormatter
с основной проблемой, что вы будете ограничивать количество разрешенных символов (хотя вы можете ограничить произвольно большое количество).
MaskFormatter mask = new MaskFormatter("*************"); // Specifies the number of characters allowed.
mask.setValidCharacters("qwertyuiopasdfghjklzxcvbnm" +
" QWERTYUIOPASDFGHJKLZXCVBNM "); // Specifies the valid characters: a-z, A-Z and space.
mask.setPlaceholderCharacter(' '); // If the input is less characters than the mask, the space character will be used to fill the rest. Then you can use the trim method in String to get rid of them.
JFormattedTextField textField = new JFormattedTextField(mask);
Я чувствую, что проверка ввода является лучшим подходом, чем ограничение символов в этом случае. Я могу добавить пример, если вы хотите использовать этот подход.
Редактировать: Использование InputVerifier
, вы должны наследовать его и переопределить verify
как показано ниже.
JTextField textField = new JTextField();
textField.setInputVerifier(new InputVerifier() {
@Override
public boolean verify(JComponent input) {
String text = ((JTextField) input).getText();
if (text.matches("[a-zA-Z ]+")) // Reads: "Any of a-z or A-Z or space one or more times (together, not each)" ---> blank field or field containing anything other than those will return false.
return true;
return false;
}
});
Текстовое поле не будет фокусироваться (кроме родительских компонентов), пока не будут выполнены требования.