Double buffering in JGraph previously consisted of off screen buffers created in the root handles and size handles to buffer drag and resize previews on a per-case basis. However, the preview buffered the entire graph image and so recreating the buffer on each operation was expensive in CPU terms. The off screen buffer and off graphics that is the graphics object of the buffer have been moved to the JGraph class. The initOffscreen() methods of RootHandle and EdgeHandle now obtain the off graphics from the graph instance using the getOffgraphics() method. This method returns the same buffer as long the graph bounds does not change, thus sharing the buffer between handles and between drag operations. This mechanism does require that setPaintMode() is called on the graphics object before use, since XOR mode will generally have been enabled.
The root and size handles still maintain a reference to the graphics object since the mouseDragged methods need to still use it. The mouseDragged method also used to check the off screen image for being null as a means of determining whether or not off screen buffering is being used. These checks can be replaced with checking the offgraphics references for null, the effect is the same. The mouseDragged methods also used to perform a Graphics.drawImage() call to update the preview. Since this call required the off screen buffer and the JGraph instance a utility method called drawImage has been added to JGraph, which holds the necessary objects for this operation. If you did not want the off screen buffer to be retained between handle operations, override getOffgraphics() in your JGraph subclass and remove the if check.
The cachedLabelBounds and cachedExtraLabelBounds variables in EdgeView were never set since getLabelBounds() and getExtraLabelBounds() were never called. If you were using these method or variable, you should find no difference just removing the calls. The label bounds are always worked out on the fly in the renderer now.