2012-06-05 4 views
0

J'ai un JTextArea et je voudrais écouter lorsque l'utilisateur colle du texte dans le JtextArea. Plus précisément, je voudrais effectuer les opérations suivantes:JTextArea Document Listener mise à jour du texte

Récupère le texte qu'ils ont collé, supprime les espaces et remplace le texte JTextArea par le texte modifié sans espaces (plutôt que le texte original collé par l'utilisateur).

Comment puis-je faire cela en utilisant un DocumentListener, et en évitant java.lang.UnsupportedOperationException: Not supported yet., qui vient à la suite du code ci-dessous:

public void insertUpdate(DocumentEvent de) { 

     final String replace = jTextArea1.getText().replaceAll("\\s",""); 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
      jTextArea1.setText(replace); 
      } 
     }); 

    } 
+0

Quelle est la trace de la pile de cette exception? Cela semble fonctionner. À moins qu'il y ait une interdiction de redéfinir le texte depuis le gestionnaire d'événements, auquel cas vous pouvez essayer un appel 'SwingUtilities.invokeLater()'. –

+0

J'ai essayé SwingUtilities.invokeLater (voir la question mise à jour). L'erreur est toujours levée. – CodeGuy

+0

Pouvez-vous poster la trace de la pile? Ce n'est pas clair (pour moi) ce qui cause l'erreur. –

Répondre

1

Je n'ai pas de problème avec la méthode insertUpdate(DocumentEvent documentEvent), vous JTextArea peut accepter seulement les caractères entrée, si vous avez un problème d'utilisation JEditorPane, là, vous pouvez importer une autre Java AWT et swing objets trop

exemple de code

private DocumentListener docListener = new DocumentListener() { 

    @Override 
    public void changedUpdate(DocumentEvent documentEvent) { 
     printIt(documentEvent); 
    } 

    @Override 
    public void insertUpdate(DocumentEvent documentEvent) { 
     printIt(documentEvent); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent documentEvent) { 
     printIt(documentEvent); 
    } 

    private void printIt(DocumentEvent documentEvent) { 
     DocumentEvent.EventType type = documentEvent.getType(); 
     //your code 
    } 
}; 

pour remplacer les caractères insérés, vous devez ajouter DocumentFilter

+0

Cependant, si vous essayez de dire textArea.setText (textArea.getText(). ReplaceAll ("\\ s", "")) vous obtenez la zone que je mets dans la question – CodeGuy

+0

voir mon edit (je vais chercher pour onle of mes exemples ici) – mKorbel

+0

donc j'ai juste besoin d'appeler une autre fonction pour le faire, plutôt que de mettre le setText() dans la fonction changeUpdate? – CodeGuy

Questions connexes