2009-07-27 4 views
0

J'ai trouvé plusieurs pages et quelques réponses sur le problème de l'entrée en tabulation dans Java, mais toutes proposent soit des méthodes de remplacement de JTextField, soit l'ajout d'un écouteur de clé à chaque composant.Est-il possible d'utiliser Entrer en tant qu'onglet sans hériter de JTextField ou d'ajouter des écouteurs de clé?

Mais n'y a-t-il pas d'autre moyen? Je ne peux pas remplacer quelque chose de LookAndFeel ou installer une politique globale?

Répondre

2

Après quelques documents rampants j'ai trouvé une solution: Il est possible pour définir les touches de traversée de mise au point sur KeyboardFocusManager au lieu d'une instance JComponent.

// 1. Get default keys 
Set<AWTKeyStroke> ftk = new HashSet<AWTKeyStroke>(
     KeyboardFocusManager.getCurrentKeyboardFocusManager() 
     .getDefaultFocusTraversalKeys(
     KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); 

// 2. Add our key 
ftk.add(KeyStroke.getKeyStroke("ENTER")); 

// 3. Set new keys 
KeyboardFocusManager.getCurrentKeyboardFocusManager() 
     .setDefaultFocusTraversalKeys(
     KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, ftk); 

Cela ajoute la clé enter à la liste des touches qui sont utilisées pour traversal avant. (Traverser vers l'arrière similaire)

1

Le marteau - de définir l'entrée comme touche de traversée de focus pour tous les composants sauf ceux qui enregistrent leurs propres - est très bien si c'est vraiment nécessaire. L'inconvénient évident est que les liaisons par défaut à l'entrer cessent de fonctionner, en particulier

  • action/auditeurs sur TextField
  • boutons par défaut
  • tout autre type de composant avec une liaison personnalisée pour entrer

Si ces effets secondaires sont problématiques, il existe une alternative moins intrusive: modifier la liaison dans l'actionMap ancêtre partagé de textFields. Après remplacement de la valeur par défaut, tous les champs textField utiliseront l'action personnalisée. Celui qui se méfie est que le remplacement doit être répété chaque fois que le LAF est changé.

+0

[et réponse intéressante pour ma question] (http://stackoverflow.com/questions/10075147/how-to-use-textaction) – mKorbel

Questions connexes