2010-11-03 27 views
5

Je travaille avec Gxt. J'ai besoin de mettre l'accent sur le premier champ activé sur la page. Mais j'ai beaucoup de pages et je veux centraliser ce comportement. Il y a un manque de documentation dans Gxt donc je me demande si quelqu'un a rencontré un tel problème et peut m'aider.Gestion de focus Gxt

Maintenant, il va comme ça dans la classe

protected void resetFocus() { 
    combobox.focus(); 
} 

@Override 
public void show() { 
    super.show(); 
    resetFocus(); 
} 

de chaque composant que j'ai trouvé com.extjs.gxt.ui.client.aria.FocusManager mais est absolument pas clair comment puis-je l'utiliser. Ou peut-être Il est également possible d'obtenir une chaîne de champs comme ils vont sur le composant en fonction de l'objectif. Et je peux déplacer la méthode resetFocus à la classe parente.

Smth comme

protected void resetFocus() { 
    *getFocusChain().get(0).focus();* 
} 
+1

Peut-être que vous nous montrerez votre code? Cela ne veut pas dire que les gens veulent aider avec votre problème quand vous l'appelez une tâche insignifiante, cela vous donne l'impression d'être paresseux dans la partie recherche du problème. – Woot4Moo

+0

Merci, vous avez raison! J'ai réalisé que mon message ne me montre pas du meilleur côté. Je vais le réécrire. – Zalivaka

+0

réécrit, ouvert à la critique et remplissant le besoin d'aide. – Zalivaka

Répondre

2

Mise au point après un certain retard rendu Vous devez utiliser Scheduler.get(). Méthode scheduleDeferred. Ou DeferredCommand sur gwt 1.7 ou avant.

Exemple d'utilisation;

Scheduler.get().scheduleDeferred(new ScheduledCommand() {

@Override 
public void execute() { 
    widget.focus(); 
    widget.el().focus(); 
    widget.getElement().focus(); 
} 

});

+0

Ce n'est pas utile du tout. Je cherchais une solution que je peux implémenter une fois et ne pas copier-coller le code focus(). J'ai fait mon propre système de gestion de focus, donc la question n'est plus réelle. – Zalivaka

+0

Pourquoi ne partagez-vous pas votre solution ici? Peut-être que votre solution aidera d'autres personnes. –

+0

Au moins cela a fonctionné pour moi. J'utilisais scheduleFinally qui ne fonctionne pas, scheduleDeferred a fait l'affaire. J'ai utilisé seulement someTextField.focus(), dans GXT 3 cela semble être suffisant. – PhiLho

3

Sur la base de la dernière réponse, je me suis que cela fonctionne dans une fenêtre GXT3 en procédant comme suit:

@Override 
public void show() { 
    super.show(); 
    Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() { 
     @Override 
     public void execute() { 
      field.focus(); 
     } 
    }); 
} 

De cette façon, lorsque la fenêtre ouvre, le champ a le focus et vous pouvez commencer à taper.