Applet, double buffering og det haker alligevel
Jeg har en simpel applet, der har en firkant jeg kan styre med piletasterne rundt i vinduet. Jeg bruger double buffering, men den hakker alligevel.... WAS IST LOS?Herunder ses min updatemetode: fundet herpå eksperten leveret af disky:
public void update( Graphics g )
{
if (dbon)
{
updateDoubleBufffered( g );
}
else
{
super.update( g );
}
}
// Do the drawing to an offscreen buffer -- maybe
private void updateDoubleBufffered( Graphics g )
{
// Let\'s make sure we have an offscreen buffer, and that
// it\'s the right size. If the applet has been resized,
// our buffer will be the wrong size and we need to make
// a new one
Dimension d = getSize();
if (offscreen == null || width!=d.width || height!=d.height || offscreen==null)
{
width = d.width;
height = d.height;
if (width>0 || height>0)
{
offscreen = createImage( width, height );
}
else
{
offscreen = null;
}
}
// If we still don\'t have one, give up
if (offscreen == null) return;
// Get the off-screen graphics object
Graphics gg = offscreen.getGraphics();
// Clear the off-screen graphics object
gg.setColor( getBackground() );
gg.fillRect( 0, 0, width, height );
gg.setColor( getForeground() );
// Draw to the off-screen graphics object
paint( gg );
// We don\'t need this Graphics object anymore
gg.dispose();
// Finally, we transfer the newly-drawn stuff right to the
// screen
g.drawImage( offscreen, 0, 0, null );
}
