KeyListener reçoit la « clé-hit » avant mon JTextField ne ..?
-
24-09-2019 - |
Question
Je suis un JTextField
, et ce domaine, j'ai ajouté un Keylistener
. Dans la méthode de keyPressed
, je demande à la méthode d'impression (System.out.println
) ce qui est à l'intérieur du JTextField
.. Si je frappe une lettre, il semble que le Keylistener
reçoit cette clé touchée avant la JTextField
est mis à jour .. Je dois frapper deux lettres voir le premier ..
Tout ce que je dois faire est de faire en majuscules toutes les lettres qu'ils sont entrés .. Ce que je suis en train de le faire en écoutant toutes les clés (j'écoute également sur la touche ENTRER pour d'autres raisons), puis faire un textfield.setText(textfield.getText().toUpperCase());
La solution 2
Je sais que pas si populaire pour répondre à votre propre question .. mais je suppose que j'ai trouvé la solution .. Au lieu de faire tout le boîtier supérieur dans la méthode keyPressed, je le fais dans le keyReleased:)
Autres conseils
Utilisez un DocumentFilter de modifier le texte tel qu'il vient.
Pas la plus jolie source et ce n'est pas 100% correct, juste montrer comment cela fonctionne. Voir l'original
((AbstractDocument)textField.getDocument()).setDocumentFilter(new UppercaseDocumentFilter());
class UppercaseDocumentFilter extends DocumentFilter {
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String text, AttributeSet attr)
throws BadLocationException {
fb.insertString(offset, text.toUpperCase(), attr);
}
public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
String text, AttributeSet attrs)
throws BadLocationException {
fb.replace(offset, length, text.toUpperCase(), attrs);
}
}
Essayez d'utiliser le document sous-jacent:
textfield.getDocument().addDocumentListener(yourListener);