2010-01-26 6 views
1

Quelle est la meilleure façon d'obtenir une valeur de TextArea après avoir tapé une clé, y compris ce caractère?Java Swing: Comment obtenir la valeur TextArea y compris le caractère que vous venez de taper?

Si je le fais dans le programme d'écoute pair, textarea.getText() renvoie la valeur sans le nouveau caractère éventuel.

Fondamentalement, je vois deux façons:

  1. traitement de remettre à plus tard avec quelque chose comme invokeLater(). Je préférerais une solution sans threads.

  2. Déterminer où placer le caractère dans le texte, en fonction de la position du carret.

Y a-t-il un autre, plus simple?

Merci.

Edit: C'est ce que j'ai:

JTextArea textarea = (JTextArea) evt.getComponent(); 
String texySource = textarea.getText(); 
char keyCode = evt.getKeyChar(); 
//if(Character.isLetterOrDigit(keyCode) || Character.isSpaceChar(keyCode) ) 
if(keyCode >= 0x20 || keyCode == 0x0A || keyCode == 0x0D ){ 
    // TODO: The carret doesn't have to be at the end... 
    //texySource += Character.toString(evt.getKeyChar()); 

    String ch = Character.toString(evt.getKeyChar()); 
    texySource = StringUtils.overlay(texySource, ch, 
    textarea.getSelectionStart(), 
    textarea.getSelectionStart() ); 
} 
+0

Vérifiez http://stackoverflow.com/questions/1252698/how-can-i-know-when-the-text-of-an-editable-jcombobox-a-été modifié pour obtenir des informations possibles. –

+1

Quel est exactement ce que vous voulez atteindre? – objects

+1

Je veux obtenir le texte avec le caractère (que l'utilisateur vient de taper) inclus. –

Répondre

0

Avez-vous essayé l'enregistrement d'un KeyListener avec une implémentation personnalisée de keyReleased (KeyEvent e)?

vérifier l'api ici: KeyListener

tutoriel de soleil avec des exemples: How to write a Key Listener

+0

Actuellement, j'utilise KeyListener ... le code ci-dessus vient de son implémentation. –

2

Avez-vous envisagé un écouteur de document? peut-être armé par l'événement de frappe? La théorie consiste à armer l'écouteur de changement de document sur une clé tapée, puis à ajouter un événement EDT pour le désarmer. Les changements de document auront lieu avant d'être désarmés. Une fois armé, vous pouvez supposer que tout changement de document a été causé dans une certaine mesure par l'événement de frappe de clé. (Attention, je n'ai pas compilé ce code, YMMV).

+0

Cela a deux inconvénients - 1) il introduit un thread, donc je suppose que je devrais synchroniser, 2) ce n'est pas plus simple ;-) Mais le 'getDocument()' est un bon point, je m'en souviendrai pour plus tard .. . –

1

Vous devez utiliser un DocumentListener et brancher votre code dans l'une des méthodes xxxupdate().