JSVGCanvas TutorialA brief introduction to the JSVGCanvas
The goal of the JSVGCanvas is to provide a Swing component that can
used to display SVG documents. With the JSVGCanvas, you can easily
display an SVG document (from a URI or a DOM tree) and manipulate it - such as
rotating, zooming, panning, selecting text, or activating hyperlinks. First this
document explains how to create a JSVGCanvas and integrate it in a Swing
application. Then, it descibes some advanced features such as the listener
mecanism used to track all events that occured while displaying or manipulating
an SVG document.
Creating a JSVGCanvas
Event Handling
Interactor
The following example illustrates how to create a JSVGCanvas. A JSVGCanvas is
Swing component that follows the Swing design rule. It means that the component
is not thread safe and all operations must be done as described in the
swing tutorial. The JSVGCanvas is also a JavaBean so it can be used
in visual application builders.
Note: If you try this example, do not forget to set your
classpath so that it contains the Batik classes and resources, as well
as Xerces (lib/xerces_2_5_0.jar) and the XML API's jar (lib/xml-apis.jar).
Each time you set a URI or an SVG DOM tree to the JSVGCanvas (using the
setURI or setSVGDocument method), the specified
document is first parsed (in case of a URI), built, rendered and optionally
updated. The proper way to be notified of those different phases is to
implement a listener and attach it to the component. There are five types
of listener:
SVGDocumentLoaderListener
This listener provides a set of methods that can be used to track
SVGDocumentLoaderEvent events. It describes the loading phase:
contructing an SVG DOM tree using an SVG file.
GVTTreeBuilderListener
This listener provides a set of methods that can be used to track
GVTTreeBuilderEvent events. It describes the building phase:
contructing a GVT (Graphics Vector Toolkit) tree using an SVG DOM tree. The GVT
tree will then be used to render the document.
SVGLoadEventDispatcherListener
This listener provides a set of methods that can be used to track
SVGLoadEventDispatcherEvent events. It describes the
DOM SVGLoad event dispatch phase.
This event is triggered only in dynamic documents.
GVTTreeRendererListener
This listener provides a set of methods that can be used to track
GVTTreeRendererEvent events. It describes the rendering phase:
constructing an image using a GVT tree.
In dynamic documents this event is fired only once for the initial rendering.
UpdateManagerListener
This listener provides a set of methods that can be used to track
UpdateManagerEvent events. It describes the running phase:
the update manager is started and then it can be suspended, resumed or
stopped, and graphics updates can be tracked.
Only dynamic documents trigger this event.
Those listeners give a complete description of the different steps of those
five phases (including error states). Adapter classes are available to ease the
creation of new listener implementation.
For static documents, you can assume that the JSVGCanvas has completed its job (parsing, building and rendering)
when the gvtRenderingCompleted method call is called, following a setURI or a setSVGDocument method call.
In case of dynamic documents, the end of the computations (parsing, building,
SVGLoad dispatch, initial rendering and updates) is marked by a call to the
updateManagerStopped method.
The JSVGCanvas provides a set of build-in interactors that let the users
manipulate the displayed document - including zoom, pan and rotate. Interactors
are dedicated to user inputs. If you want to add new behaviors to the
JSVGCanvas, you can implement the Interactor interface. Then, you
can register this new interactor to the component using the
getInteractors().add method.