2010-09-07 24 views
3

Dans mon application gwt, sur certains écrans, je crée une boîte de dialogue avec un formulaire de saisie. Je voudrais pouvoir utiliser la propriété tabindex mais seulement dans cette boîte de dialogue. (c'est-à-dire: cycles premier à dernier champ de cette boîte de dialogue seulement) Maintenant, si j'appuie sur tabulation lorsque le dernier champ est sélectionné, le focus se déplacera sur le premier index de l'onglet qui se trouve derrière la boîte de dialogue). C'est assez ennuyeux car il faut maintenant tabuler plusieurs fois jusqu'à ce que le focus retourne au premier champ de boîte de dialogue. La configuration de la boîte de dialogue à modale est encore pire car dès que vous faites un tabulation en dehors de la boîte de dialogue, la touche Tab est ignorée car les objets en dehors de la boîte de dialogue ne reçoivent plus d'événements clavier (tabulation impossible!). Est-ce que ma seule option est d'écouter la touche de tabulation et de gérer la tabulation manuellement? Je ferais bien de tabuler sortir de mon application et sur la barre d'URL (par exemple) tant qu'il revient à ma boîte de dialogue sans avoir à passer par tous les éléments en dessous.gwt tabindex inside boîte de dialogue

Répondre

1

Eh bien, après presque un mois sans réponse, j'ai décidé d'aller avec la manipulation manuelle des touches de tabulation. Fonctionne comme un charme, mais il ignore maintenant la barre d'url dans le cycle onglet (très bien par moi). J'ai utilisé cet article pour commencer: http://albertattard.blogspot.com/2009/11/capturing-tab-key-in-gwt-textarea.html J'ai simplement ajouté un panneau de discussion à la racine de mon dialogue.

+0

: Pourriez-vous élaborer sur ce que vous avez fait plus en détail? Je suis venu le même problème que le vôtre ci-dessus. – MindBrain

3

Eh bien, mieux vaut tard que jamais! J'ai eu le même problème. La solution est en fait assez facile. Imaginons que vous ayez une boîte de dialogue qui hérite de Composite et qui contient des widgets pour la saisie de données et les boutons. La fenêtre principale contient également des widgets d'interface utilisateur tels que des champs d'entrée et des boutons. Vous configurez l'ordre de tabulation pour cette fenêtre principale. Lorsque vous appuyez sur un bouton pour afficher la boîte de dialogue, définissez chacun des contrôles de la fenêtre principale (setTabIndex(-1)), ce qui désactive l'ordre des onglets.

Pour la nouvelle boîte de dialogue, enregistrez le code suivant dans le constructeur:

this.addAttachHandler(new AttachEvent.Handler() { 
    @Override 
    public void onAttachOrDetach(AttachEvent event) { 
     if(isAttached()) { 
      setTabOrder(); 
     } else { 
      clearTabOrder(); 
     }    
    } 
}); 

puis créer deux méthodes setTabOrder() et clearTabOrder() qui sont appelés, selon le cas. Il semble que GWT se confond avec plusieurs fenêtres avec un ordre de tabulation. Vous pouvez mettre fin à la confusion en créant de manière dynamique un ordre de tabulation lorsque chaque fenêtre de dialogue est affichée/masquée.

+0

ressemble à une bonne solution; Je suis sur le point d'écrire un formulaire de saisie de données popup et je viens de commencer à envisager Tabindex. @Rob Mitchell: qu'est-ce que tu veux dire en créant dynamiquement un ordre de tabulation? – Saad