2015-04-01 3 views
0

Я искал решение повсюду, но все нашел решения, позволяющие использовать только цифры, буквенно-цифровые (с использованием DocumentFilter).Как использовать JFormattedTextField, чтобы разрешить только алфавиты?

Но, мне нужно разрешить только алфавиты, и я намерен использовать JFormattedTextField из-за некоторых преимуществ.

Итак, как использовать JFormattedTextField, чтобы разрешить только алфавиты (a-zA-Z) (без пробелов, знаков препинания, букв)!

+0

является JFormattedTextField возможность получить переменное количество алфавитов? или его фиксированное число? –

+0

переменное количество алфавитов! – Akshat

ответ

0

Поскольку число является переменной, и если я не ошибаюсь, JFormattedTextField использует маски для фиксированной длины цифр, будет проще использовать литер для изменения текстового события и проверять текст в элементе, удаляя недопустимые символы.

Нечто подобное:

JTextField f = null; 

f.getDocument().addDocumentListener(new DocumentListener() 
{ 
    @Override 
    public void insertUpdate(DocumentEvent e) 
    { 
    validateInputText(); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent e) 
    { 
    validateInputText(); 
    } 

    @Override 
    public void changedUpdate(DocumentEvent e) 
    { 
    validateInputText(); 
    } 
}); 
+0

И что, если я скопирую текст с числами, пробелами и вставьте его в поле. В этом случае это не сработает. – Akshat

+0

Обновлен мой asnwer, чтобы решить эту проблему. Теперь, когда текст изменился, не имеет значения, как его изменили, вы будете уведомлены, так что вы сможете справиться со всей необходимой валидацией. –

+0

Да, но какое использование, если данные уже были обновлены. Методы 'DocumentListener' запускаются после обновления документа. – Akshat

0

После попытки много решений, я думаю, что лучшим решением является расширение DocumentFilter класса.

Вот код:

class AlphabetFilter extends DocumentFilter { 

    @Override 
    public void insertString(FilterBypass fb, int offset, String string, 
      AttributeSet attr) throws BadLocationException { 
     super.insertString(fb, offset, string.replaceAll("[^A-Za-z]+", ""), attr); 
    } 

    @Override 
    public void replace(FilterBypass fb, int offset, int length, 
      String string, AttributeSet attr) throws BadLocationException { 
     super.replace(fb, offset, length, string.replaceAll("[^A-Za-z]+", ""), attr); 
    } 

} 
Смежные вопросы