Hi Mark,

Looks like you have uncovered a bug.  Both behviors should get the
event.  Thanks for the test case.

-- 
Kevin Rushforth
Java 3D Team
Sun Microsystems

[EMAIL PROTECTED]


>Date: Thu, 17 Dec 1998 13:24:47 -0800
>From: "Mark J. Young" <[EMAIL PROTECTED]>
>To: [EMAIL PROTECTED], [EMAIL PROTECTED]
>Subject: Behaviors that WakeupOnAWTEvent block other Behaviors?
>
>In a single scene graph, if I have more than one Behavior
>that wakes up on AWT events, its seems that only one Behavior
>will wakeup - the one that is encountered first in a traversal.
>The other Behaviors are effectively blocked from hearing
>about the event they are also interested in.
>
>Is this a bug? Am I doing something wrong? I've appended
>a short example below. Only the Behavior labeled "A"
>will wakeup (and print out a message).
>
>Its not obvious from the documentation that things should
>work this way. I don't like this property. While, I
>appreciate that performance would be more efficient if there
>was only one Behavior that would wake up for a particular
>event, it limits how well scene graph objects can be encapsulated.
>I am trying to develop Java3D components that I can mix and
>match in any scene - I am trying to give them independent
>responsibility for what they do about AWT events.
>I'd appreciate any feedback.
>
>Regards,
>Mark
>
>p.s.
>// testMultAwt.java - demonstrate how one behavior blocks another
>
>import com.sun.j3d.utils.applet.MainFrame;
>import com.sun.j3d.utils.universe.SimpleUniverse;
>import java.applet.Applet;
>import javax.vecmath.Point3d;
>import javax.media.j3d.*;
>import java.awt.*;
>import java.awt.event.*;
>import java.util.*;
>
>public class testMultAwt extends Applet
>{
>   public static void main(String[] args)
>      { new MainFrame(new testMultAwt(), 200, 200); }
>
>   public testMultAwt()
>   {
>      // two behaviors, each listening for AWT MousePress
>      // - if one wakes up it will print a message that
>      //   includes the label passed here to the constructor
>      // "The Problem" - only "A" will print out messages
>      BranchGroup scene = new BranchGroup();
>      scene.addChild(new MouseResponse("A"));
>      scene.addChild(new MouseResponse("B"));
>
>      // bare necessities for a live scene graph
>      // that includes the above
>      Canvas3D canv = new Canvas3D(null);
>      SimpleUniverse univ = new SimpleUniverse(canv);
>      univ.getViewingPlatform().setNominalViewingTransform();
>      univ.addBranchGraph(scene);
>      setLayout(new BorderLayout());
>      add("Center", canv);
>   }
>
>   Bounds bounds = new BoundingSphere(new Point3d(0f,0f,0f), 100f);
>   WakeupCondition mousePress = new       WakeupOnAWTEvent(MouseEvent.MOUSE_PRESSED);
>
>   class MouseResponse extends Behavior
>   {
>      String label;
>      long count = 0;
>
>      MouseResponse(String label)
>      {
>         super();
>         this.label = label;
>         setSchedulingBounds(bounds);
>      }
>
>      public void initialize() { wakeupOn(mousePress); }
>
>      public void processStimulus(Enumeration criteria)
>      {
>         while (criteria.hasMoreElements()) {
>            WakeupCriterion criterion =                
>(WakeupCriterion)criteria.nextElement();
>            if (criterion instanceof WakeupOnAWTEvent) {
>               AWTEvent[] event =                   
>((WakeupOnAWTEvent)criterion).getAWTEvent();
>               for (int i=0 ; i < event.length ; i++, count++)
>                  System.out.println(
>                     "AWTEvent(" + label + ")[" + count + "]"
>                     + ": " + "event[" + event[i].getID() + "]"
>                     + " @ " + ((MouseEvent)event[i]).getX()
>                     + "," + ((MouseEvent)event[i]).getY()
>                  );
>            }
>         }
>         wakeupOn(mousePress);
>      }
>   }
>}
>
>// end of file
>
=====================================================================
To subscribe/unsubscribe, send mail to [EMAIL PROTECTED]
Java 3D Home Page: http://java.sun.com/products/java-media/3D/

Reply via email to