The layered canvas is based on the same idea present on some photo editors.
When you have individual layers, you can paint them individualy. With this approach is much easier to draw regions, update single parts of the canvas and develop advanced graphical user interfaces with drag-and-drop, interactiveness data manipulation and visual effects such as zoom.
Optimization become very easy too, because LayeredCanvas offers different types of layers with different behaviours. For instance, you can choose the AreaCachedLayer to cache a custom draw area of your screen and optimize the painting of this area or even implement your own ICanvasLayer based on your needs.
As the Layers are organized with a LinkedList, you can change the z-order of the layers, iterate, manipulate, add and remove layers at any time. You can clear the layers' cache whenever you need to update the contents. And you can dispose them too, to free graphical resources.
Go ahead and take a look inside the package net.sf.swtgraph.layeredcanvas.