Swing: игнорировать событие потери фокуса текстового поля при нажатии определенной кнопки

У меня есть текстовое поле Swing, содержащее значение, которое проверяется на событии focuslost. Форма имеет множество других элементов управления, в том числе кнопку отмены. Я хочу, чтобы проверка была пропущена, если фокус был потерян из-за нажатия кнопки отмены. Как это может быть сделано?


person Abhijeet Kashnia    schedule 20.07.2012    source источник
comment
Вы всегда можете проверить OppositeComponent FocusEvent, но обычно это не очень удобно.   -  person Guillaume Polet    schedule 20.07.2012
comment
@Guillaume: Ваше предложение сработало для меня. Хакерский и неуправляемый, но делает свое дело. Если вы добавите это как ответ, я приму это.   -  person Abhijeet Kashnia    schedule 20.07.2012


Ответы (1)


Я бы предложил удалить код, выполняющий проверку focusLost, и либо реализовать проверку в DocumentListener, либо выбрать JFormattedTextField со встроенной проверкой.

Также с точки зрения пользователя я предпочитаю проверку «на лету», а не потерю фокуса. Когда я начинаю печатать, приятно видеть, когда ваш ввод становится неправильным. Кроме того, вы можете отключить кнопку «ОК», пока есть недопустимый ввод, и оставить только кнопку «Отмена» включенной. Это, конечно, требует, чтобы ваша проверка не выводила всплывающие сообщения, а просто добавляла указание в/рядом с полями ввода.

person Robin    schedule 20.07.2012
comment
Некоторые проверки могут быть дорогостоящими, если выполняются нажатием клавиши. В противном случае, ценные предложения. - person Abhijeet Kashnia; 20.07.2012