[swing] Problème avec paintComponent sur un JPanel

Problème avec paintComponent sur un JPanel [swing] - Java - Programmation

Marsh Posté le 29-12-2005 à 11:17:06    

Salut a tous !
 
Je participe a un projet de jeu de plateau reprenant le principe du labyrinthe master(tm)  ;)  avec entre autres, l'insertion des cases du plateau de jeu.
 
A la base, les cases devaient etre des JLabel, c plus simple pour gèrer les images, mais, il faut que le redimensionnement de la fenetre soit possible, alors les cases sont devenues des JPanel, dans lesquels j'ai redéfini paintComponent.
 
Chaque case est censée dessiner son attribut 'image', C'est une image créée avec le toolkit, puis j'appelle g.drawImage, tout ceci fonctionne à l'initialisation.
 
Mais, (en cliquant sur un bouton) j'insère une case ( enfin, je change les attributs de la case et de sa rangée de cases ), et toute la rangée devient grise, j'attends 4 à 5 secondes et tout se repeint.
A la deuxième insertion, ça ne se repeint pas  :( .
 
J'ai vu le truc comme quoi repaint() fait son boulot 'dès que possible' dans l'API, mais j'aimerais que le repeinturage se fasse directement. (paintImmediately ne fonctionne pas non plus)
 
En gros, dans le listener, j'ai une boucle qui fait :
    for(int i....){
           case[i].refresh(); // met a jour les attributs de la case
           case[i].repaint(); // repeint la case
    }
 
Voila, merci beaucoup d'avance !
(si vous voulez les classes et les images, ça risque d'etre coton, mais bon, je peux tenter de vous les mettre aussi sur le forum).

Reply

Marsh Posté le 29-12-2005 à 11:17:06   

Reply

Marsh Posté le 29-12-2005 à 12:06:35    

Peut être faut-il utiliser un Thread.sleep pour temporiser paint(), ou y a t-il un secret avec le buffering... doubleBuffered ?
 
C'est vraiment la misère Graphics....
 
Merci quand même...

Reply

Marsh Posté le 30-12-2005 à 15:00:08    

Okay, ben en fait, la boucle qui affichait les éléments de chaque case causait des problèmes, :( ne mettez jamais une boucle dans paintComponent a mons que cela ne soit vraiment nécéssaire...
 
Merci a ceux qui ont donné un peu de leur temps ne serait-ce qu'un peu ;) désolé....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed