[java] Clearing a Frame, QUICKLY

Started by
2 comments, last by Kosh 24 years, 1 month ago
hi everyone, ok, I am animating an image in java, using swing''s JFrame, I create the object with vertices in an int array, then rotate them myself. When I have the final tranformed coords, I then create a GeneralPath of the points, which is then rendered using g2d.fill(shape). My problem is that if I use ClearRect(0,0,screenx,screeny); I get a huge amount of flicker in the image, do you know anyway to clear the buffer that will eliminate this flicker ? can you prove an example ? thanks. PS. dont recommend any books, I do not have any money to buy them, so any recommendations to buy XY java book, is just not needed. Thanks kosh
if understanding it made and born with time, then time, is understandings greatest enemy.....
Advertisement
It''s basic Double Buffering that you need.

BufferedImage DB = new BufferedImage(x,y,int Type);
Graphics DBg = DB.getGraphics();

now paint onto DBg whereever you used to paint on g. And the last thing you should do is paint
g.drawImage(0,0,DB,null);

This will transfer the image to the JFrame in one hit. The only problem is that you have to make sure the BufferedImage and Graphics are made before you start painting into them. BTW, unless you''ve overriden update(), you shouldn''t need to clear the screen, repaint() calls update(), and update() calls clear then paint().

P.S. this is all in Just Java by Peter van der Linden if you want to buy it.
Double buffering is your answer. I did this once a long time ago and far away... (in Java), but I think how you do this is use the Component''s createImage to create an offscreen image or context....[someone will fill in the answer with the most up to date technique. Sorry]

JoeG
joeG
Yes you can make the Image from your components, like a JFrame using JFrame.createImage();
But the tricky part is grabbing the graphics context from the newly created image using getGraphics, and using that in all your painting routines save the last drawImage(NewlyCreatedImage,0,0,null);

This topic is closed to new replies.

Advertisement