Technique de double buffering 2

Messages postés
22
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
11 février 2004
- - Dernière réponse : 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)
Afficher la suite 

1 réponse

Messages postés
182
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
5 janvier 2004
3
0
Merci
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
Commenter la réponse de cs_raff