GXT KeyListener.comComponentKeyDown() немедленно закрывает MessageBox.alert()

StackOverflow https://stackoverflow.com/questions/691684

Вопрос

В GXT, MessageBox методы являются асинхронными, что означает, что приложение не «блокируется», пока отображается окно сообщения.

я использую KeyListener для обработки нажатия клавиши ввода в форме (чтобы повысить удобство использования, т. е. разрешить отправку формы с помощью клавиши ввода) и последующего отключения полей формы, пока приложение обрабатывает учетные данные пользователя.Если они неверны, я показываю MessageBox.alert() а затем снова включите поля формы.Однако, поскольку alert() возвращается немедленно, поля формы немедленно снова становятся доступными, что позволяет пользователю вводить данные, не закрывая оповещение.

Решение состоит в том, чтобы использовать обратный вызов в alert();однако нажатие клавиши ввода не только приводит к отправке формы, но также приводит к немедленному закрытию предупреждения (как если бы и форма, и окно сообщения обрабатывали клавишу ввода).Как оставить окно предупреждения открытым до тех пор, пока пользователь не нажмет кнопку «Ввод» второй раз или не нажмет кнопку «ОК»?

Это было полезно?

Решение

Ключ DeferredCommand предоставлено ГВТ:

Этот класс позволяет выполнять код после завершения всех ожидающих в данный момент обработчиков событий, используя метод addCommand(Command) или addCommand(IncrementalCommand) методы.Это полезно, когда вам нужно выполнить код вне контекста текущего стека.

if(!validate())
{
    DeferredCommand.addCommand(new Command() {
        public void execute() {
            MessageBox.alert("Error", "You must enter a username and password.", alertListener);
            return;
        }
    });
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top