Используйте DocumentFilter.
К моменту, когда KeyListener возвращает событие, символ уже добавляется в поле.
Также KeyListener не будет обрабатывать пользователя, вставляя содержимое в поле