Accueil > FAQ > FAQ Java > Comment dessiner dans un JPanel à l’aide du double buffering ?

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)
    }