2016-04-21 1 views
0

Je travaille sur un éditeur de texte, et je veux être capable de détecter la différence entre deux types distincts d'événements clés: ceux qui résultent d'une modification visible du texte dans mon JTextArea (ie, caractères alphanumériques, le entrer la clé, les symboles), et ceux qui ne résultent pas d'un changement visible (touches directionnelles, touches de contrôle, raccourcis clavier). Je sais que je peux le faire avec une déclaration de changement très verbeux, mais y a-t-il une façon moins verbeuse de faire ce qui suit?Balayage Java: Comment puis-je détecter si la touche enfoncée affiche la sortie dans mon JTextArea?

private void checkKey (java.awt.event.KeyEvent evt) { 
    if (saved && /*some way to check if the text in the box has changed */) { 
     editorTitle.setText(currentedit + " (Edited)"); 
     saved = false; 
    } 
} 

Répondre

4

N'utilisez pas un KeyListener. Il existe de meilleures API pour gérer ces situations.

Si vous voulez savoir si les données dans le composant de texte ont changé, vous devez utiliser un DocumentListener. Il va générer un événement chaque fois que du texte est ajouté ou supprimé.

Lisez la section du tutoriel Swing sur How to Write a DocumentListener pour plus d'informations.

Si vous voulez savoir quand une touche fléchée est pressée pour invoquer un type d'action, vous devez utiliser Key Bindings. C'est ainsi que fonctionnent tous les composants Swing. Un KeyStroke est lié à un Action. Voir Key Bindings pour plus d'informations et une liste complète des raccourcis clavier par défaut de chaque composant.

Les raccourcis sont également implémentés dans Swing en utilisant les liaisons de touches.