Thanks, it works! > -----Original Message----- > From: Thomas DeWeese [mailto:[EMAIL PROTECTED] > Sent: Saturday, August 09, 2003 6:06 AM > To: Batik Users > Subject: Re: Dynamic JSVGCanvas Updates > > > 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] > >
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]