TraversalPolicy et JTabbedPane
Bonjour à tous,
je travaille actuellement sur une application Swing et j'aurais besoin de personnaliser l'ordre du focus. J'ai déjà jeté un coup d'oeil au tuto proposé par Baptiste Wicht.
J'ai utilisé plus ou moins le système proposé (avec 2 HashMap) pour obtenir ceci :
Code:
1 2 3 4 5 6 7 8 9
|
GestionnaireFocus gestionFocus = new GestionnaireFocus();
setFocusTraversalPolicy(gestionFocus);
setFocusTraversalPolicyProvider(true);
gestionFocus.addComponent(textField1, 0);
gestionFocus.addComponent(textField2, 1);
gestionFocus.addComponent(onglets, 2);
onglets.setFocusCycleRoot(true); |
J'ai donc un JPanel contenant 2 JTextFields et un JTabbedPane. J'ai également défini une policy pour chaque onglet (JPanel) et lorsque je change d'onglet (en utilisant un addChangeListener), je change de policy pour le JTabbedPane.
Code:
1 2 3 4 5 6 7 8 9 10
|
onglets.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
Container c = (Container)onglets.getSelectedComponent();
if (c != null && c.getFocusTraversalPolicy() != null)
onglets.setFocusTraversalPolicy(c.getFocusTraversalPolicy());
else
onglets.setFocusTraversalPolicy(null);
}
}); |
Problème : lorsque je navigue avec la touche TAB dans mon JPanel, je passe bien d'un JTextField à un autre mais pas moyen de faire en sorte que le focus passe sur le premier champ de l'onglet sélectionné dans le JTabbedPane. En regardant de plus pret, le focus passe sur le 1er champ puis le 2eme et lorsqu'il arrive sur le JTabbedPane, il repasse immédiatement au 1er champ.
J'espère que je suis clair dans mon explication :oops:.
J'ai beau tout retourné, je n'arrive pas à trouver l'astuce qui permet d'avoir le fonctionnement que je cherche. En gros, je passe par mes 2 JTextField et ensuite je voudrais arriver sur le 1er champ dans mon onglet et ensuite boucler sur le contenu de cet onglet.
Donc si quelqu'un a une idée pour faire tout ça, ou m'éclairer sur la gestion du focus (j'ai forcément raté un concept de base là dedans)... merci d'avance ;)