I have an SVG document containing a rectangle which is to be animated
repeatedly depending upon a value received in a callback function. The
SVG document is loaded inside an applet. The problem i face is that
SVGCanvas is not updated automatically until i minimize the html page
containing the applet and maximize it. Doing this calls the repaint method
of applet. If i call the repaint method myself inside the callback method,
i see the canvas flickering. I have already read a dozen posts on this
forum
related to this and have tried all the suggested solutions. All point to
something like
"If you set the canvas's document state to JSVGCanvas.ALWAYS_DYNAMIC and run
all your document updates in the UpdateManager, it should update itself".
What to do to update the SVG canvas without calling repaint() ? I am already
following
the above guideline.
Following are relevant portions of my code.
public class BatikApplet extends Applet {
UpdateManager updateManager = null;
//Initialize the applet
public void init() {
jbInit();
svgCanvas = new JSVGCanvas();
svgCanvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);
String parser =
XMLResourceDescriptor.getXMLParserClassName();
docFactory = new SAXSVGDocumentFactory(parser);
rectDoc =
docFactory.createSVGDocument("http://localhost:8080/"+screenName);
registerListeners();
svgCanvas.setDocument(rectDoc);
this.add(svgCanvas, BorderLayout.NORTH);
svgCanvas.repaint();
}
// Paint method
public void paint(Graphics g) {
svgCanvas.paintComponent(g);
}
// Method which is called repeatedly with updated animation values to be
drawn
public synchronized void callback(final String strData) {
runnable = new Runnable() {
public void run() {
//Call to external object which changes the SVG
document
oAnimEngine.animateScreen(strData);
}
};
try {
updateManager.getUpdateRunnableQueue().invokeLater(runnable);
} catch (Exception ex) {
}
}
// Register listener method
public void registerListeners() {
svgCanvas.addGVTTreeRendererListener(new
GVTTreeRendererAdapter() {
public void gvtRenderingCompleted(GVTTreeRendererEvent e)
{
updateManager = svgCanvas.getUpdateManager();
oAnimEngine.setCustomSVGDocument(rectDoc);
}
});
}
}
--
View this message in context:
http://www.nabble.com/Require-repaint-in-applet-to-update-canvas-tf4403481.html#a12562305
Sent from the Batik - Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]