Grant Mc Auley wrote:
Thank you for your reply.

I have modified my ActionListener:

button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    UpdateManager um = canvas.getUpdateManager();
    um.getUpdateRunnableQueue().invokeLater(new Runnable() {
      public void run() {
        resizeCircle();
      }
    });
  }
});

This is because resizeCircle doesn't return until the last update is complete. You need to post a new runnable to the updateQueue to do each update. This is just like the swing event thread. If you hold the event thread no updates happen in the gui. If you hold the update thread no updates happen in the SVG.


and put canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC) *before*
canvas.setDocument(doc), as the FAQ says.

Now, I only see the *last update* but not the others in between.

I also implemented updateStarted and updateCompleted methods of
UpdateManagerListener and added it to the canvas.  It seems that all the
update events are being consolidated into a single event even though I
have sleep delays in between the resizings.  In my real application, I
need to be able to see many dynamic updates to the SVG that occur pretty
close together.  Is there anything else I can do to get the desired
behavior?

Put the call to resizeCircle in a new thread, and have it dispatch a runnable to the updateManager thread every second that does all the DOM interaction.

Read the FAQ to understand why Batik is architected this way.
Any more thoughts would be appreciated.



-----Original Message-----
From: Thomas DeWeese [mailto:[EMAIL PROTECTED] Sent: Friday, August 08, 2003 4:33 PM
To: Batik Users
Subject: Re: Dynamic JSVGCanvas Updates



Hi Grant,


Please see: http://xml.apache.org/batik/faqs.html#faq-21


Grant Mc Auley wrote:


Hello,

My simple test program (relevant code below) loads an SVG

file into a


JSVGCanvas. Clicking a button calls a method that

iteratively resizes a


circle in the SVG document.

What I am observing is this:
1) After clicking the toolbar button, I do not see the circle resize
unless I move my mouse into the canvas.
2) Further, unless I continually move my mouse over the

canvas I do not


see the iterative resizing. That is, when I continuously move the
mouse, I see the circle change size every second. When I stop, the
circle size does not change. When I move again, I see the

updates. If


I move outside of the canvas I see no updates.

How are canvas updates related to mouse position and

movement? Is there


something else that I must do to see live or dynamic canvas updates?


// ------- Code:


JSVGCanvas canvas = new JSVGCanvas();
File f = new File(shapes.svg");
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
Document doc = factory.createDocument(f.toURL().toString());
canvas.setDocument(doc);
canvas.setDocumentState(JSVGCanvas.ALWAYS_DYNAMIC);

...

button.addActionListener(new ActionListener() {

 public void actionPerformed(ActionEvent e) {
   Thread t = new Thread(new Runnable() {
     public void run() {
       resizeCircle();
     }
   });
   t.start();
 }

});

...

private void resizeCircle() throws DOMException {

 SVGDocument doc = canvas.getSVGDocument();
 Element el = doc.getElementById("circleOne");
 for (int i = 0; i < 10; i++) {

   if (el.getAttribute("r").equals("20")) { // initial value of r
(radius) is 20
     el.setAttribute("r", "50");
   else
     el.setAttribute("r", "20");
   try {
     Thread.sleep(1000);
   }
   catch (InterruptedException ex) {
   }

}

}
// -------




---------------------------------------------------------------------


To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]






---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to