Pourquoi faire du double buffering alors que Swing le fait **déjà** ?! Dans paintComponent(), dessine directement sur le Graphics fourni en paramètre. C'est tout.
Version imprimable
Pourquoi faire du double buffering alors que Swing le fait **déjà** ?! Dans paintComponent(), dessine directement sur le Graphics fourni en paramètre. C'est tout.
Dans ce cas dois je utiliser setclips de la classe graphique et ainsi 'retailler' la zone graphique a à utiliser ou dois je n'afficher qu'une partie de la zone graphique (drawimage avec le maximum de paramètre
depuis l'aide :
drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, Color bgcolor, ImageObserver observer)
Draws as much of the specified area of the specified image as is currently available, scaling it on the fly to fit inside the specified area of the destination drawable surface.
Le fait déjà ?
je pensais que c'était une méthode à employer pour l'affichage..mon souci est que je dessine un graphique dans un JPanel (lui meme dans un autre JPanel) puis lors des redimmensionnements est de hide / show de la fenetre , le graphique ne s'affiche pas...j'ai donc pensé à enregistrer le contexte graphique dand les methodes paint ou pentCOmposent pour traiter l'image enregistrer AVANT les modifs graphiques...puis de traiter l'image pour ensuite l'afficher..
Je ne désire pas refaire le traitement mathématique et donc graphique lors d'une modification graphique de la fenetre (il y a trop de point et le premier affichage est long, en enregistrant mon graphiqe en image je peux l'agrandir, le réduire, le cacher sans relancer le calcul)
Sans ce traitement de paint* le graphique s'affiche tel un flash puis disparait immédiatement (repaint ou validate appelé automatiquement à la fin de l'excutioninitiale de la fenetre ???)
Désolé pour le doublon c'est le dernier message quiest bon
Le fait déjà ?
je pensais que c'était une méthode à employer pour l'affichage..mon souci est que je dessine un graphique dans un JPanel (lui meme dans un autre JPanel) puis lors des redimmensionnements est de hide / show de la fenetre , le graphique ne s'affiche pas...j'ai donc pensé à enregistrer le contexte graphique dans les methodes paint ou paintCOmposent pour traiter l'image enregistrée AVANT les modifs graphiques...puis de traiter l'image laisser l'affichage des autres composants swing puis ensuite de l'afficher..pour ne pas que l'image soit écraser..
Je ne désire pas refaire le traitement mathématique qui (re)fabrique le graphique . lors d'une modification graphique de la fenetre, il faudrait que le graphique soit aussi modifier (agrandissement réduction etc..) mais il y a beaucoup de point sur ce graphique et le premier affichage est long, en enregistrant mon graphiqe en image je peux l'agrandir, le réduire, le cacher sans relancer le calcul...
dois je utilisé les Layer ?
Sans ce traitement de paint* le graphique s'affiche tel un flash puis disparait immédiatement (repaint ou validate appelé automatiquement à la fin de l'excutioninitiale de la fenetre ???)
Si l'affichage disparaît c'est sûrement que tu utilises getGraphics() quelque part. Ta raison pour le buffer est valable (on parle ici d'image intermédiaire en fait) mais mal implémentée. Dans ton exemple tu redessinais sur l'image à chaque appel à paint. Voici comment faire :
Note que dans l'appel à drawImage() il n'est nul besoin de spécifier la largeur ou la hauteur.Code:
1
2
3
4
5
6
7
8
9
10
11 protected void paintComponent(Graphics g) { if (buffer == null) { buffer = // créer BufferedImage Graphics2D g2 = buffer.createGraphics(); // dessiner sur g2 g2.dispose(); } g.drawImage(buffer, x, y, null); }