pas en mesure de définir le focus sur la zone de texte dans une application GWT

Cela ne devrait pas causer beaucoup de douleur, mais il est. C'est un très étrange problème. Dans une application GWT, j'en ai deux .fichiers java, login.java et application.java.
Dans login.java je suis la création d'un utilisateur de la page de login où, si le nom d'utilisateur et le mot de passe est vérifié, l'utilisateur est enregistré dans l'application et application.java faut partir d'ici.

Maintenant en application. java est onModuleLoad (), c'est la façon dont je commence avec une page de connexion.

public void onModuleLoad() {
  Login login = new Login();
  login.textBoxUsername.setFocus(true);
  RootLayoutPanel.get().add(login);}

Cela fonctionne très bien, sauf pour le petit problème de ne pas être en mesure de définir le focus sur la zone de texte nom d'utilisateur lors du chargement de la page. J'ai essayé evrything je pense. Mais l'accent n'est pas mis sur la zone de texte. Si quelqu'un peut proposer une solution, s'il vous plaît. Votre aide est grandement appréciée.

Solution: (Dans le cas où il aide à toute personne confrontée à la même question)

final Login login = new Login();
  Scheduler.get().scheduleDeferred(new ScheduledCommand() {
        public void execute () {
            login.textBoxUsername.setFocus(true);
        }
   });

  RootLayoutPanel.get().add(login);
  • Vous pouvez avoir besoin d'appeler setFocus() après la connexion, widget a été ajouté à la RootLayoutPanel -- avez-vous essayé?
  • oui, quand je l'appelle setFocus() après RootLayoutPanel.get().ajouter(login); l'écran de connexion ne prend pas en charge.
  • Êtes-vous d'obtenir l'erreur de script si vous appelez setFocus() après RootLayoutPanel.get().ajouter(connexion); ? Je pense que le navigateur prend un certain temps pour charger votre login widget. Pouvez-vous s'il vous plaît essayer la setFocus appeler à l'intérieur de l'gwt minuterie bloc avec 5 secondes d'intervalle? Alors on peut comprendre où est le problème exactement.
  • Si il faut un certain temps pour créer une Connexion widget, ou de l'ajouter à la RootLayoutPanel, l'appel suivant ne se produira pas jusqu'à ce que l'opération terminée. @sherry Êtes-vous en cours d'exécution dans le Dev Mode de sorte que vous pouvez voir toutes les GWT erreurs?
  • Vous avez raison,le navigateur prend du temps pour charger la connexion widget bien que ce délai n'est pas visible pour l'utilisateur. Je n'étais pas en mesure de comprendre quand la charge de la connexion widget est en cours d'achèvement. Avec ce concept, j'ai utilisé @Pierre suggestion ci-dessous. À l'aide de DeferredCommand fonctionne! Il attend jusqu'à la connexion widget est chargé appelle ensuite setFocus(). Bien que DeferredCommand est obsolète et que je vais devoir trouver ce qui peut être utilisé à sa place. Mais au moins je vais quelque part maintenant.. je vous Remercie pour votre réponse!
  • vous êtes de droite. Je pense avoir trouvé la solution. Je vous remercie pour votre réponse.
  • Bien que vous avez résolu ce problème. 🙂
  • Hall: C'est purement la question du moment. Dans gwt création de widget est différent et le chargement et le rendu widget est différent. Comme je l'ai mentionné dans mon premier commentaire, il faut un certain temps à charger(render) pas pour la création. Merci pour votre suggestion.

InformationsquelleAutor sherry | 2011-05-10