Technique de double buffering 2

tartur Messages postés 22 Date d'inscription mercredi 2 avril 2003 Statut Membre Dernière intervention 11 février 2004 - 13 juin 2003 à 14:02
cs_raff Messages postés 182 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 5 janvier 2004 - 14 juin 2003 à 19:57
en fait je vous explique le probleme:
je veux dessiner des composants (circulaires) sur un panel, et chaque composant il a son propre dessinateur.
le déroulement se fait de la façon suivante pour le moment:
* le dessinateur récupere le panel.
* il récupère son objet graphics et dessine un cercle de centre (x,y).
alors ma question est comment pourrais je utiliser le double buffering dans cette situation. est ce qu'il faudrait que je crée un offImag et un offGraphics dans le dessinateur , et dans ce cas n'aurais je po un pb d'affichage des autres composants, ( au moment de la création d'un nouveau composant il se dessine et efface tous les autres.). Ou bien utiliser le double buffering dans le panel, et dans ce cas je ne c pas faire car le panel n'accède pas aux composants.
si vous n'avez pas bien compris le pb n'hesiter pas à me poser des questions, si vous l'avez bien compris alors n'hésiter pas à me proposer des solutions bien détaillés ça serait trés gentil de votre part merci
tcho
tartur :big)

1 réponse

cs_raff Messages postés 182 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 5 janvier 2004 3
14 juin 2003 à 19:57
bah c'est simple il me semble...l'objet qui se dessine doit accéder aux graphiques du panel...alors il suffit de lui envoyer l'objet graphics du offImage...par exemple

Cercle 1 --> méthode dessineToi(Graphics g)
Cercle 2 --> méthode dessineToi(Graphics g)
Cercle 3 --> méthode dessineToi(Graphics g)
etc

Panel --> dans paint(Graphics g) :

for (int i = 0; i < nbreDeCercle; i++)
cercle[i].dessineToi(offImage.getGraphics());

puis, à la fin de la méthode paint :
g.drawImage(offImage, 0,0,this);

maintenant, il s'agit de faire un thread dans ton panel qui
provoquera un repaint() régulièrement...

si ce repaint est très fréquent, alors vaut mieux redéfinir la méthode update:
void update(){
paint(this.getGraphics())
}

pour éviter un "clear" sur les graphiques, et ainsi éviter de scintillement...car la méthode repaint() appelle la méthode update() qui effectue un clearRect(0,0,width,height) sur les graphiques du panel.

raff
0
Rejoignez-nous