Введите Delay после события keyReleased () - PullRequest
3 голосов
/ 23 марта 2010

Итак, я работаю с Swing, и мне нужно найти чистый (без CPU-hogging-way) способ ввести задержку для текстового поля. По сути, пользователи вводят число в это поле, а событие keyReleased () проверяет, соответствует ли ввод нескольким параметрам, а затем присваивает значение элементу хранения данных в программе. Если данные недействительны, отображается сообщение. Поскольку подпрограмма вызывается каждый раз, когда они вводят букву (если они не набирают ОЧЕНЬ быстро), процесс ввода становится довольно раздражающим (так как обычно один или два символа данных не соответствуют допустимым параметрам).

Я попытался настроить объект таймера и задание таймера для него, однако, похоже, он работает не очень хорошо (потому что он задерживает поток, в котором работает программа). Возможность просто подождать, пока данные не достигнут определенной длины, также невозможна, поскольку (как и раньше) входные данные могут различаться по длине.

У кого-нибудь есть идеи? Спасибо!

Ответы [ 2 ]

4 голосов
/ 23 марта 2010

Я делал такие вещи довольно часто, и у меня есть два предложения.

Стандартный способ справиться с этим - использовать класс InputVerifier. Это, однако, работает только тогда, когда компонент ввода теряет фокус - он предназначен для предотвращения перехода пользователя из поля ввода, когда оно недопустимо, но не проверяет до тех пор.

Другой способ, которым я это сделал, - проверять достоверность при каждом нажатии клавиши, но не выводить сообщение, когда оно недействительно. Вместо этого используйте цвет для обозначения действительности - например, покрасьте его в красный цвет, если он недействителен, и черный, если он действителен. Это не так навязчиво, как сообщение. Вы можете использовать всплывающую подсказку, чтобы дать более подробный отзыв.

Вы также можете комбинировать эти методы.

3 голосов
/ 23 марта 2010

Написать пользовательский DocumentFilter. Прочитайте раздел из учебника по Swing по Особенности текстовых компонентов для получения дополнительной информации.

...