Как использовать JFormattedTextfield для принятия имен, таких как строки?

Каким будет значение фактора FormatterFactory в JFormattedTextField, если я хочу принимать только буквы и пробелы.

Потому что я хочу, чтобы он принимал только имена. Нравится - John Doe.


person Enam Ahmed Shahaz    schedule 03.04.2014    source источник


Ответы (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;
    }
});

Текстовое поле не будет передавать фокус (за исключением родительских компонентов), пока не будут выполнены требования.

person user1803551    schedule 03.04.2014
comment
Да, я хочу использовать этот подход. какой пример?? - person Enam Ahmed Shahaz; 03.04.2014
comment
@EnamehmedShahaz Добавлен пример. - person user1803551; 03.04.2014