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

}

crwooda at 2007-7-10 11:42:05 > top of Java-index,Security,Cryptography...
# 2
Thanks so much!!!! WOW, ...
ManReda at 2007-7-10 11:42:05 > top of Java-index,Security,Cryptography...