2012-05-01 3 views
1

J'essaie d'ajouter/ajouter du texte à un JTextArea dynamiquement. J'ai essayé de faire:Ajout dynamique de texte à un JTextArea en utilisant Java

for(int i=0;i<10;i++){ 
    jtextArea.append("i="+i); 
    //some processing code*********** 
} 

En fait, toutes les valeurs i apposent à JTextArea après la fin de la boucle for. Mais je veux ajouter la valeur i à jtextAres car la boucle for progresse. Merci d'avance.

Répondre

3

Je suppose que vous faites ceci sur le fil d'expédition d'événement et votre code de traitement bloquera ce fil. Par conséquent, le JTextArea ne peut pas être repeint.

Vous devez obtenir le code de traitement du thread d'interface utilisateur. La suggestion normale est d'utiliser un SwingWorker, mais dans ce cas, il peut être plus facile d'utiliser un Thread normal et d'utiliser SwingUtilities.invokeLater pour planifier l'appel append sur l'EDT.

Remarque: Je suggère d'appeler append sur l'EDT à partir de JDK1.7 le javadoc de cette méthode n'indique plus qu'il est thread-safe (le javadoc 1.6 le mentionne toujours). Mais en regardant this question montre que même dans 1.6, vous êtes probablement plus sûr de l'appeler sur l'EDT. Le tutoriel Concurrency in Swing est une bonne introduction à ce sujet.

3

Je ne sais pas si je comprends bien votre question bien, mais essayez ce code:

for(int i = 0; i < 10; i++) 
{ 
    final int x = i; 
    SwingUtilities.invokeAndWait(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      jtextArea.append("i=" + x); 
     } 
    }); 

    //some processing code*********** 
} 
+0

Dans le cas où la boucle est inscrite au EDT (comme je le soupçonne depuis les mises à jour ne sont pas visualisées) ce won » Je fais une chose. Bien sûr, si ce n'est pas sur l'EDT et qu'il utilise Java 7 où l'append ne semble plus sûr, c'est une très bonne suggestion. Nous avons évidemment besoin de plus d'infos – Robin

Questions connexes