looops
Messages postés9Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention29 mars 2006
-
29 mars 2006 à 11:56
cs_zazou1
Messages postés48Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention23 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);
looops
Messages postés9Date d'inscriptiondimanche 10 avril 2005StatutMembreDernière intervention29 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.
/**
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);
}
}
});
}
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;
}