2009-10-05 7 views
0

J'ai un JTextField, et je voudrais que le système fasse un traitement sur ce que l'utilisateur a tapé chaque fois que l'utilisateur quitte le champ de texte. L'ActionListener que vous pouvez ajouter à JTextField se déclenche uniquement lorsque l'utilisateur appuie sur Entrée. Je souhaite que la routine de traitement s'exécute chaque fois que l'utilisateur quitte la zone de texte par n'importe quel moyen - onglets, clics, appuyez sur Entrée, etc. (Le traitement en question consiste à enregistrer le texte que l'utilisateur a tapé l'objet de données approprié, rien d'extraordinaire.)Comment déclencher une action lorsque l'utilisateur quitte un JTextBox?

Mon google-fu a échoué sur celui-ci: je suis confiant que c'est possible, je ne vois tout simplement pas comment.

Répondre

6

Add a FocusListener.

Il est à noter que c'est un programme d'écoute de niveau relativement bas. Sur JComboBox il ne fonctionnera pas à moins que vous trouviez le champ de texte (et peut-être le bouton) que les insertions PL PL & particulières. Swing est un peu étrange de cette façon (parmi beaucoup d'autres façons).

Bien que pour mon argent, les changements non-cosmétiques qui se produisent lorsque le focus quitte un champ donnent une expérience utilisateur médiocre. Il vaut mieux faire des changements pertinents à chaque changement avec un écouteur dans le document du champ de texte.

+1

Aha! FocusListener est ce dont je me souvenais vaguement. L'action en question est de sauvegarder le texte que l'utilisateur a tapé - est-ce préférable de le faire via un écouteur sur le document, pensez-vous? –

+0

Oui, mais raisonnablement. Vous voulez probablement vous assurer que vous n'enregistrez pas le document entier à chaque frappe. Petite période de repos entre les sauvegardes (et ne se chevauchent pas). Si le document est volumineux (peu probable avec un 'JTextField'), ajoutez-le simplement à un journal la plupart du temps. Cela dit, déplacer des champs peut être un bon moment pour être un peu plus urgent sur l'épargne. –

+0

Pour l'anecdote, l'auditeur de focus a fait exactement ce dont j'avais besoin. Merci! –

0

Si vous voulez éditer le texte tel qu'il est saisi, vous devez utiliser un DocumentFilter.

Si vous voulez valider le texte en tant qu'entité complète, vous pouvez utiliser un InputVerifier.