Indicateur de progression dans une JFrame - Java - Programmation
Marsh Posté le 13-12-2004 à 15:39:32
Merci,
j'ai essayé de créer un thread parallèle qui effectue le repaint (là aussi en jouant un peu avec des wait et sleep) et ça n'a rien changé...
Peut être que je me trompe de méthode et que ce n'est pas le repaint qu'il faut appeler ?
Marsh Posté le 13-12-2004 à 15:48:43
Zedar a écrit : Merci, |
C'est bien repaint qu'il faut appeler pour mettre à jour un composant Swing. Par contre il faut t'assurer que les opérations d'affichage se font bien dans le "event-dispatching thread" et le reste ailleur.
http://java.sun.com/docs/books/tut [...] index.html
et
http://java.sun.com/docs/books/tut [...] reads.html
Sinon poste ton code (si c'est pas trop gros, ou essaie d'isoler le problème), ça peut toujours aider.
Marsh Posté le 13-12-2004 à 15:54:34
Disons que j'ai essayé vraiment pas mal de manières de caser mon repaint
Là j'ai un programme très simple, une classe qui construit mon interface (extends JFrame), et une autre classe qui contient le corps de mon programme (requêtes SQL et écriture dans un fichier Excel).
La méthode principale de cette dernière classe récupère ma JFrame en paramètre, j'ai donc essayé de faire un fenetre.repaint(), puis un fenetre.text.repaint() (où text est le JTextField qui m'intéresse), de rajouter un sleep avant et après... mais pas moyen, ça ne fait rien du tout.
Je vais regarder plus en détails ton deuxième lien sur le event-dispatching thread, je ne connais pas ça. Merci
Marsh Posté le 13-12-2004 à 16:06:07
Poste ton code parce que là à part le fait que ça marche pas, j'ai pas beaucoup d'informations.
Marsh Posté le 13-12-2004 à 16:33:27
Blabla (code enlevé, désolé)
Marsh Posté le 13-12-2004 à 17:41:04
Snif c'est si moche que ça ?
Sinon j'ai essayé d'utiliser ton second lien, mais ça ne change rien... par contre je ne suis pas sûr de bien l'utiliser
Marsh Posté le 14-12-2004 à 11:32:37
Bon, merci bcp à tous, ça marche nickel avec un SwingWorker
Marsh Posté le 13-12-2004 à 15:05:08
Bonjour,
Voilà, j'ai fait une petite interface en Swing qui me lance un traitement très long (une dizaine de requêtes SQL), le tout pouvant durer plus de 2heures.
J'aimerais que mon interface se rafraîchisse suffisamment souvent pour mettre à jour un JTextField qui contiendrait le numéro de requête en cours : elles sont lancées dans une boucle for(), j'aimerais donc qu'à chaque passage dans cette boucle, on mette à jour le champ texte.
J'ai essayé pas mal de méthodes, repaint() du Container, du JTextField, faire un sleep avant et après le repaint... bref plein de trucs cochons (je tâtonne en interfaces) mais rien ne marche, et la valeur de mon champ ne change qu'une fois le traitement terminé.
Auriez-vous une idée pour me débloquer?
Merci d'avance