Graphics can be retrieved off of any Graphical component using .getGraphics(). This will return the Graphic in use.
Best I can describe the idea behind double buffering for the graphics is you track two sets of graphics: your graphic with the intent of being what the graphic
will be, and the internal graphic that is. You paint everything you need to your graphic and then swap the graphics during a repaint which minimizes the flicker over using individual component updates.
Here's an example of double buffering. Its used in an applet, but its logic is identical to using it in a Frame:
http://www.realapplets.com/tutorial/...Buffering.html. Its usage overrides that of the paint and update methods to handle the double buffering. It looks like the easiest tutorial I could find, but doesn't explain why it works (for which you can try to google a few more for the actual ideas behind double buffering, there are a lot of good examples with step by step as to what does what).