Buffering the Render
I'm trying to use buffered graphics, because my images appear to be flickery. However, as opposed to the traditional method of rendering (via an applet), I have to render on a panel. Thus, the following won't work:
http://www.realapplets.com/tutorial/DoubleBuffering.html
which has this class signature:
publicclass DoubleBufferingextends Appletimplements MouseMotionListener
{
Any ideas, to as how I can render from a class that has this signature:
publicclass Animateextends Panel{
For the example (above) won't work with my class.
Message was edited by:
ManRed
[917 byte] By [
ManReda] at [2007-11-26 22:34:18]

# 1
// <applet code="DoubleBufferingApplet" width="300" height="300"></applet>
import java.applet.*;
import java.awt.event.*;
import java.awt.*;
public class DoubleBufferingApplet extends Applet
{
public void init()
{
setLayout(new BorderLayout());
add(new DoubleBufferingPanel());
}
}
class DoubleBufferingPanel extends Panel implements MouseMotionListener
{
// The object we will use to write with instead of the standard screen graphics
Graphics bufferGraphics;
// The image that will contain everything that has been drawn on
// bufferGraphics.
Image offscreen;
// To get the width and height of the applet.
Dimension dim;
int curX, curY;
public DoubleBufferingPanel()
{
// We'll redraw the applet eacht time the mouse has moved.
addMouseMotionListener(this);
setBackground(Color.black);
}
public void paint(Graphics g)
{
// We know we can get accurate size information
// during the first trip thru this method.
if(offscreen == null)
{
// We'll ask the width and height by this
dim = getSize();
// Create an offscreen image to draw on
// Make it the size of the applet, this is just perfect larger
// size could slow it down unnecessary.
offscreen = createImage(dim.width,dim.height);
// by doing this everything that is drawn by bufferGraphics
// will be written on the offscreen image.
bufferGraphics = offscreen.getGraphics();
}
// Wipe off everything that has been drawn before
// Otherwise previous drawings would also be displayed.
bufferGraphics.clearRect(0,0,dim.width,dim.width);
bufferGraphics.setColor(Color.red);
bufferGraphics.drawString("Bad Double-buffered",10,10);
// draw the rect at the current mouse position
// to the offscreen image
bufferGraphics.fillRect(curX,curY,20,20);
// draw the offscreen image to the screen like a normal image.
// Since offscreen is the screen width we start at 0,0.
g.drawImage(offscreen,0,0,this);
}
// Always required for good double-buffering.
// This will cause the applet not to first wipe off
// previous drawings but to immediately repaint.
// the wiping off also causes flickering.
// Update is called automatically when repaint() is called.
public void update(Graphics g)
{
paint(g);
}
// Save the current mouse position to paint a rectangle there.
// and request a repaint()
public void mouseMoved(MouseEvent evt)
{
curX = evt.getX();
curY = evt.getY();
repaint();
}
// The necessary methods.
public void mouseDragged(MouseEvent evt) { }
}