Pb de reactualisation de JTextArea

looops Messages postés 9 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 29 mars 2006 - 29 mars 2006 à 11:56
cs_zazou1 Messages postés 48 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 23 juillet 2010 - 29 mars 2006 à 14:39
bonjour a tous,

je suis en train de réaliser un programme comportant une interface graphique.
lorsque que l'utilisateur clic sur un des boutons un thread se lance et tourne en boucle (un serveur se trouvant dans une autre classe). Pour le moment le serveur envoie des infos (connnexion, deconnexion etc) dans la console. Mais j aimerai qu il envoie ces infos dans un JTextArea.

Pour réaliser cela je rempli un vecteur de reponses du serveur et j appelle une methode de ma classe principale qui est sencée me réactualiser le JTextArea. J ai essayé toutes les methodes de reactualisation mais en vain!!

public void repaintRep(Vector rep ){

for (int i = 0 ; i < rep.size() ; i++){
jTextArea1.setText(rep.elementAt(i) +"\n");
}
System.out.println(jTextArea1.getText());
jTextArea1.update(jTextArea1.getGraphics());
jTextArea1.repaint();
this.validate();
this.update(this.getGraphics());
this.repaint();
}

dans cette methode le System.out.println me renvoie bien les infos du serveur insérées dans le JTextArea. Donc le JTextArea contient bien des infos mais a l'affichage rien ne s'affiche.

De plus j ai essayé de modifier l appel de cette methode en utilisant la methode invokelater() de la classe SwingUtilities comme ce-dessou

reponse.add(">>>Serveur lancé : écoute TCP sur port "+portTCP);

Runnable doWorkRunnable = new Runnable() {
public void run() { repaintRep(reponse); }
};
SwingUtilities.invokeLater(doWorkRunnable);

mais la aussi rien ne s affiche.

Est ce que quelqu'un aurait une petite idée??

merci
@+

5 réponses

bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
29 mars 2006 à 11:59
coucou,

dans ton for, tu fait un setText, c.a.d que chaque itération ecrase celle d'avant :
essaye plutot de passer par un StringBuffer :

StringBuffer buf = new StringBuffer();
for (int i = 0 ; i < rep.size() ; i++)
buf.append(rep.elementAt(i) +"\n");
jTextArea1.setText( buf.toString() );
//eventuellement :
jTextArea1.repaint();
0
looops Messages postés 9 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 29 mars 2006
29 mars 2006 à 12:07
salut bloofi,

En effet j'écrase bien l'itération d'avant, j'avais pas vu cela. Mais le problème ne vient pas de la car quand j'affiche dans la console les elements du JTextArea il m'affiche la derniere info mais il ne me l'affiche pas dans mon interface graphique.

merci quand meme,
@+
0
cs_zazou1 Messages postés 48 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 23 juillet 2010
29 mars 2006 à 12:57
salut,
il faut quel sera de type String pour que vous pouvez l'affiche.
0
looops Messages postés 9 Date d'inscription dimanche 10 avril 2005 Statut Membre Dernière intervention 29 mars 2006
29 mars 2006 à 13:01
salut,

c est deja du type string donc cela ne peut pas venir de la

merci
@+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_zazou1 Messages postés 48 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 23 juillet 2010
29 mars 2006 à 14:39
reponse Accepte
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.Timer;


/**
This program demonstrates the use of a progress bar
to monitor the progress of a thread.
*/
public class ProgressBarTest
{
public static void main(String[] args)
{
ProgressBarFrame frame = new ProgressBarFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}


/**
A frame that contains a button to launch a simulated activity,
a progress bar, and a text area for the activity output.
*/
class ProgressBarFrame extends JFrame
{
public ProgressBarFrame()
{
setTitle("ProgressBarTest");
setSize(WIDTH, HEIGHT);


Container contentPane = getContentPane();


// this text area holds the activity output
textArea = new JTextArea();


// set up panel with button and progress bar


JPanel panel = new JPanel();
startButton = new JButton("Start");
progressBar = new JProgressBar();
progressBar.setStringPainted(true);
panel.add(startButton);
panel.add(progressBar);
contentPane.add(new JScrollPane(textArea),
BorderLayout.CENTER);
contentPane.add(panel, BorderLayout.SOUTH);


// set up the button action


startButton.addActionListener(new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
progressBar.setMaximum(1000);
activity = new SimulatedActivity(1000);
activity.start();
activityMonitor.start();
startButton.setEnabled(false);
}
});



// set up the timer action


activityMonitor = new Timer(500, new
ActionListener()
{
public void actionPerformed(ActionEvent event)
{
int current = activity.getCurrent();

// show progress
textArea.append(current + "\n");
progressBar.setValue(current);

// check if task is completed
if (current == activity.getTarget())
{
activityMonitor.stop();
startButton.setEnabled(true);
}
}
});
}


private Timer activityMonitor;
private JButton startButton;
private JProgressBar progressBar;
private JTextArea textArea;
private SimulatedActivity activity;


public static final int WIDTH = 300;
public static final int HEIGHT = 200;
}


/**
A similated activity thread.
*/
class SimulatedActivity extends Thread
{
/**
Constructs the simulated activity thread object. The
thread increments a counter from 0 to a given target.
@param t the target value of the counter.
*/
public SimulatedActivity(int t)
{
current = 0;
target = t;
}


public int getTarget()
{
return target;
}


public int getCurrent()
{
return current;
}


public void run()
{
try
{
while (current < target && !interrupted())
{
sleep(100);
current++;
}
}
catch(InterruptedException e)
{
}
}


private int current;
private int target;
}
0
Rejoignez-nous