JFrame et double Buffering

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 - 11 oct. 2006 à 09:58
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 11 oct. 2006 à 10:18
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

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
11 oct. 2006 à 10:18
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
0
Rejoignez-nous