If you are into Java programming this might sound to you as a big surprise and almost as a huge heresy. No, you just don't need a JPanel
and you definitely don't need double buffering.
What you need is just a JFrame
and buffering with a BufferedImage
, where you save your Graphics2D
using createImage
. You then use drawImage
to display the saved buffer whenever you need to refresh the whole JFrame
. Never redisplay your whole JFrame
with Graphics2D
primitives, but only with the BufferedImage
. You can redisplay only parts of the JFrame
. In this case your JFrame
"paint" method must know what part to update by selective painting (like highlighting a button when clicked).
This is far much faster than double buffering and you will never see any flickering. Thus you will have the best performance with the same result as using a JPanel
and double buffering.
But that is not the only advantage. It also allows easily zooming your entire window (by using setSize
method) because you are dealing with the JFrame
directly. Every time your window changes size (for example, by clicking on a magnifier lens with "+" or "-" icon) you create a new BufferedImage
for the redisplay. This concept is a desirable feature when you are dealing with vector graphics interfaces (basically using Shape
and Graphics2D
), as zooming can become part of the interface.
It might sound weird to talk about vector graphics and a pixelized BufferedImage
at the same time. However, a Shape
is first scan-converted before being displayed. By using a buffer you are just anticipating and cutting down scan-conversion time. This is extremely useful in complex vector graphics interfaces. It is a know fact that what is deterring the generalized use of vector graphics in GUIs, either in embedded applications, either on the web, is that it is quite time consuming.
This will likely change in the near future when hyper high resolution screens will appear and programs will have to deal with a wide range of screen resolutions. Vector graphics will then be the most elegant solution to this problem. Using lots of photos and images in your web sites? If they are only for decoration you will probably be in trouble when this arrives.
Top comments (0)