Comment dessiner dans un JPanel à l’aide du double buffering ?
Par Sylvain Rampacek le mercredi 12 mai 2010 à 10h06
Dans le cas général, le double-buffering consiste à dessiner sur une bitmap en mémoire plutôt qu’un bitmap à l’écran.
Plutôt que de dessiner directement sur un JPanel, il faudra passer par une Image (par exemple BufferedImage), que vous recopierez ensuite dans le graphics du JPanel.
Dans une éventuelle méthode jPanel1MouseMoved (évènement gérant le déplacement de la souris), ou plus exactement une méthode déclenchant l’évènement rafraichissement de l’image vous pouvez utiliser :
private Graphics gfx = null; // graphics du jpanel
private Image img = null; // image en mémoire
private void jPanel1MouseMoved(java.awt.event.MouseEvent evt) {
if (gfx == null) gfx = jPanel1.getGraphics(); // pour ne le faire qu'une seule fois
if (img == null) img = new BufferedImage(jPanel1.getWidth(), jPanel1.getHeight(), BufferedImage.TYPE_INT_RGB) ;
Graphics gfxImg = img.getGraphics(); // vous dessiner sur l'image en mémoire
gfxImg.setColor(Color.WHITE);
gfxImg.fillRect(1, 1, jPanel1.getWidth()-2, jPanel1.getHeight()-2);
gfxImg.setColor(Color.BLUE);
gfxImg.fillOval(50, 10, 100, 160);
gfxImg.setColor(Color.RED);
gfxImg.drawRect(10, 10, evt.getX(), evt.getY());
gfx.drawImage(img, 0, 0, jPanel1); // vous copier l'image en mémoire dans le graphics du jpanel)
}