2010-05-19 6 views
1

J'ai une boîte de dialogue de recherche avec un JTextField qui est utilisé comme champ de recherche.Java/Swing: Problème avec l'écouteur de touche

Lorsque l'utilisateur saisit quelque chose, il recherche la base de données, affiche le résultat dans une table JTable et sélectionne le premier élément. Si le premier résultat est ce qu'ils cherchaient, je veux les laisser rapidement accepter la boîte de dialogue, en appuyant sur Entrée (pendant que le JTextField est mis au point).

J'ai donc ajouté un KeyListener au JTextField et ça marche bien.

Maintenant, le problème: L'utilisateur ouvre peut ouvrir la boîte de dialogue en appuyant sur Entrée quand un bouton "Rechercher" sur le cadre parent de la boîte de dialogue est mis au point.

La boîte de dialogue s'affiche et JTextField récupère l'événement keyReleased (à partir de la touche Entrée qui l'affiche), de sorte qu'il s'affiche et se ferme. Si l'utilisateur maintient Enter down, le JTextField reçoit les événements keyPressed, keyTyped et keyReleased.

Comment puis-je résoudre sans avoir recours à des solutions de contournement laid?

La plate-forme est Windows 7 x64, btw.

Merci.

Répondre

2

J'ai donc ajouté un KeyListener au JTextField et cela fonctionne bien.

Vous ne devriez PAS utiliser un KeyListener pour cela. Vous devriez ajouter un ActionListener au champ de texte.

En général, vous ne devez pas utiliser les KeyListeners que vous devez utiliser Key Bindings.

+0

Merci, cela a fonctionné. Je suis nouveau sur Java, je ne connaissais pas les raccourcis clavier. J'ai oublié de mentionner que j'avais essayé de définir un accélérateur à partir de la boîte de dialogue d'action de NetBeans, mais cela ne fonctionnait pas, j'ai donc essayé l'écouteur de touche. Merci encore! – Mike

Questions connexes