JFrame et double Buffering

Signaler
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
-
Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
-
Salut :

Est ce que la technique du double Buffering (plus exactement le Hardware Double Buffering) n'est plus "supportée" par le composant JFrame?
 
class Jeu2D extends JFrame {
    // ça cause une exception
    createBufferStrategy (2);
}

J'ai trouvé de nombreux exemples mais qui illustrent le hardware double buffering avec les classes Frame ou Canvas.

Est ce que quelqu'un a une explication qui satisfait ma curiosité?

Remarque : On peut faire du software double buffereing avec  la classe  JFrame mais elle est trop lente.

1 réponse

Messages postés
5365
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 août 2021
111
Salut,

tu peux toujour le faire en swing avec JFrame, JWindow et/ou JDialog
exemple (je suis avec le jdk1.5)

public class Game extends JFrameimplements WindowListener{

    private static final long    serialVersionUID = 1798105891547721279L;
    private BufferStrategy    strategy              = null;
    private Graphics             backBuffer          = null;
    private int                       width                   = 640;
    private int                       height                  = 480;
    private boolean               initiated               = false;
    private Graphics2D         g2                       = null;

    public Game(int width, int height) {
        this.width = width;
        this.height = height;
        setSize(width, height);
        setLocationRelativeTo(null);
        setResizable(false);
        addWindowListener(this);
        setBackground(Color.BLACK);
    }

    public void setVisible(boolean b) {
        super.setVisible(b);
        if (b & !initiated)
            init();
    }

    /**
     * initialise l'affichage
     */
    private void init() {
        setIgnoreRepaint(true);
        createBufferStrategy(2);
        strategy = getBufferStrategy();
        backBuffer = strategy.getDrawGraphics();
        g2 = (Graphics2D) backBuffer;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        initiated = true;
    }
......

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA