Question

Dans GXT, les méthodes MessageBox sont asynchrones, ce qui signifie que l'application ne « verrouiller » pas pendant que la boîte de message est affiché.

I en utilisant un KeyListener pour traiter entrer touches sous une forme (pour augmenter la facilité d'utilisation, à savoir, ce qui permet la forme qui sera présenté par la touche d'entrée), puis désactiver les champs de formulaire tandis que l'application traite les informations d'identification de l'utilisateur. Si elles sont incorrectes, je montre un MessageBox.alert() puis réactivez les champs de formulaire. Cependant, étant donné que alert() retourne immédiatement, les champs de formulaire sont immédiatement disponibles à nouveau, ce qui permet à l'utilisateur de données d'entrée sans fermer l'alerte.

La solution consiste à utiliser une fonction de rappel en alert(); cependant, la touche Enter provoque non seulement keypress la forme de soumettre, mais provoque également l'alerte de rejeter immédiatement (comme si la forme et la boîte de message sont le traitement de la touche Entrée). Comment puis-je garder la boîte d'alerte ouverte jusqu'à ce que l'utilisateur appuie entrer une seconde fois ou clique sur le bouton « Ok »?

Était-ce utile?

La solution

La clé est fournie par DeferredCommand GWT :

  

Cette classe vous permet d'exécuter du code après des gestionnaires d'événements tous en cours actuellement ont terminé, en utilisant les méthodes de addCommand(Command) ou addCommand(IncrementalCommand). Ceci est utile lorsque vous avez besoin d'exécuter du code en dehors du contexte de la pile actuelle.

if(!validate())
{
    DeferredCommand.addCommand(new Command() {
        public void execute() {
            MessageBox.alert("Error", "You must enter a username and password.", alertListener);
            return;
        }
    });
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top