Hi Zhao,

"comlong zhao" <[EMAIL PROTECTED]> wrote on 08/09/2006 12:00:28 PM:

>       Thanks a lot for your suggestion. I used a really large Button to 
try 
> whether it could work well.

    What do you mean "a really large Button"?  there is no button in SVG.

>       Now, by your words, it seems the GVTtree is not changed by my 
code. I 
> have to modifies the document to change the GVTtree, but not only by the 
code 
> of "ad.mouseClicked(evt);" .Is it right?

    Why would you expect that dispatching an event would change GVTtree?

>       And, what is the event handler I could use? Could you explain a 
litter 
> more?   What is the correlative method I could use.

    There are several ways to add a DOM event handler.  The simplest is by
using one of the event attributes in the SVG:

        <!--- very large rect which should turn blue when mouse moves over 
it -->
        <rect onmousemove="evt.target.setAttribute('fill', 'blue')"
                x="-1000%" y="-1000%" width="3000%" height="3000%"
                fill="red"/>

        You can also investigate W3C DOM Events spec in particular the
'EventTarget.addEventHandler' method, which you can call from Java to
add event handlers to just about any rendered SVG Element.

> On 8/9/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote: 
> Hi Zhao,
> 
> "comlong zhao" <[EMAIL PROTECTED]> wrote on 08/09/2006 04:13:03 AM: 
> 
> >          First, I want to ask what is difference between the GVTtree 
and
> the
> > GraphicsNode. If the GVTtree is changed, whether the GraphicsNode is
> changed
> > too?  more details more better. thanks a lot. 
> 
>    The GVT tree is the collection of GraphicsNodes.  Put another way
> the GraphicsNodes are the nodes in the GVT tree.
> 
> >          For my project, I do not use the JSVGCanvas, the event is 
come
> from
> > Canvas3D. I use the AWTEventDispatcher, the instance named "ad".  I 
use
> the
> > normal way that
> 
>    The code all looks pretty good. The important thing to know is that
> an event is only dispatched in the SVG tree if the mouse event is over 
> an SVG element.
> 
> >         ad.setRootNode(gvtRoot);
> >         ad.setBaseTransform(curTxf);     //curTxf is the 
AffineTransform
> 
>     The mouse coordinates in evt are transformed to the user coordinate 
> system of the root SVG element by 'curTxf' this point is then checked to
> see if it is inside any of the SVG elements if it is then a mouse event
> is dispatched.   Otherwise no event will be dispatched.  Also obviously 
> you must have an event handler that modifies the document, simply
> dispatching
> an event won't change anything.
> 
>     I would start with a very simple SVG document that just contains a
> very large rectangle (much larger than the 'displayed' document) and 
have 
> a mousemove handler that prints the clientX/Y of the DOM event to see 
what
> you
> are getting and if they make sense.
> 
> >          And then from the Frame I could call the MouseEvent of like
> this:
> >      public void mouseEvent1(final MouseEvent evt){        //transport 

> the
> > parameter of evt to this method
> >         final Element rect = r;       // the element r has been
> initialized
> >         RunnableQueue rq = manager.getUpdateRunnableQueue();     // 
add
> the 
> > event to RunableQueue
> >           try {   rq.invokeAndWait(new Runnable() {
> >                         public void run() {
> >                             ad.mouseClicked(evt);               // set 

> mouse
> > event to change the GTV tree
> >                            rect.setAttributeNS(null, "x", ""+5); //
> > setAttribute of the document
> >                        };
> >                     }); 
> >             } catch (InterruptedException ie) {
> >                 ie.printStackTrace();
> >             }
> >            if(manager.getUpdateTracker().hasChanged())      // test
> whether
> > the GVTtree has been changed 
> >             System.out.println("GTV changed");    }
> 
> >        But unfortunately, I could find the GVTtree has been changed 
only
> by
> > the Attribute changed. If I removed the line of attribute, it seems 
that 
> the
> > GTVTree will not been changed.  I want to know whether this is a right
> way
> > that just only setRootNode() and then call the mouseCliked(). Or I
> should add
> > some code. For the RunableQueue, I think this way is right, because if 
I 
> 
> > removed it, I can not see the result of the Attribute changed.
> >        What should I do to change the GVTtree by one mouseclick?
> >        Thanks a lot
> >         Regards
> >          zhao 
> 
> ---------------------------------------------------------------------
> 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