Hello, bon j'ai un problème à la con, je m'explique :
J'ai un JFormattedTextfield encapsulé dans un JComponent.
1) problème si on définit une implémentation de la classe abstraite FocusTraversalPolicy dans la frame, le component en paramètre de la methode getComponentAfter(...) qui est appelé par exemple avec la touche Tab, est le JFormattedTextField et non mon JComponent qui l'encapsule. (si je veux que ce soit transparent pour l'utilisateur c'est bien loupé)
2) donc moi plein d'entrain je commence à coder un petit wrapper dans mon JComponent :
et au niveau de l'initialisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 private class CtiFieldFocusPolicy extends FocusTraversalPolicy { public CtiFieldFocusPolicy() { super(); } public Component getDefaultComponent(Container container) { return container.getFocusCycleRootAncestor().getFocusTraversalPolicy(). getDefaultComponent(container.getFocusCycleRootAncestor()); } public Component getFirstComponent(Container container) { return container.getFocusCycleRootAncestor().getFocusTraversalPolicy(). getFirstComponent(container.getFocusCycleRootAncestor()); } public Component getLastComponent(Container container) { return container.getFocusCycleRootAncestor().getFocusTraversalPolicy(). getLastComponent(container.getFocusCycleRootAncestor()); } public Component getComponentAfter(Container container, Component component) { return container.getFocusCycleRootAncestor().getFocusTraversalPolicy(). getComponentAfter(container.getFocusCycleRootAncestor(), container); } public Component getComponentBefore(Container container, Component component) { return container.getFocusCycleRootAncestor().getFocusTraversalPolicy(). getComponentBefore(container.getFocusCycleRootAncestor(), container); } }
Ouf, ca marche bien avec le FocusTraversalPolicy du composant parent, nickel *content*
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 this.setFocusable(true); this.setFocusCycleRoot(true); this.setFocusTraversalPolicy(new CtiFieldFocusPolicy());
Bon je teste ensuite sans avoir defini de FTP au niveau de parent, et là ca merde....le getComponentAfter appelle le getDefaultComponent (apres moults et moults tergiversations...) , et dès que j'appuie sur TAB c'est systematiquement le premier field de la frame qui prend le focus.
J'ai besoin d'une solution !!! y'a peut etre une feinte a faire quelque part mais ou ? ... si quelqu'un a une idée ou est dejà tombé sur ce genre de ... j'y suis depuis ce matin je craque.
Partager