Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (780)
Games in Android Showcase (233)
games submitted by our members
Games in WIP (856)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  adding a branchgroup to a live scene with swing buttons  (Read 3263 times)
0 Members and 1 Guest are viewing this topic.
Offline spytox4

Senior Newbie

« Posted 2006-01-02 13:21:25 »

Hi, please have a look on the following code.
I want to add "objects" in a live scene.
I've planned to do this by attaching a new branchgroup
to an existing alive structure.
The code of the new branchgroup is in the action of a swing button.

// method "addObject" called by the button

    private class addObject extends BranchGroup implements ActionListener {
        public void actionPerformed(ActionEvent event){
          BranchGroup obj = new BranchGroup ();
          // Creation of a sphere
          Sphere sphere = new Sphere (0.3f);
          obj.addChild (sphere);
          obj.addChild (this);
          System.out.println("add action");

// definition of the button

   private JButton ajout = new JButton("Ajout");
          JPanel p2 = new JPanel();
        ajout.addActionListener(new addObject());

// code to attach the branchgroup

   BranchGroup  b2 = new addObject();
        System.out.println("br "+b2);
        return objRoot;

But, the Sphere is not seen on the scene
even if the action on the button seems to work.
And if i do twice, i get this error :

Exception occurred during event dispatching: Group.addChild: child already has a parent




   at applet3d.Scene3D$addObject.actionPerformed(

   at javax.swing.AbstractButton.fireActionPerformed(

   at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(

   at javax.swing.DefaultButtonModel.fireActionPerformed(

   at javax.swing.DefaultButtonModel.setPressed(

   at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(

   at java.awt.Component.processMouseEvent(

   at java.awt.Component.processEvent(

   at java.awt.Container.processEvent(

   at java.awt.Component.dispatchEventImpl(

   at java.awt.Container.dispatchEventImpl(

   at java.awt.Component.dispatchEvent(

   at java.awt.LightweightDispatcher.retargetMouseEvent(

   at java.awt.LightweightDispatcher.processMouseEvent(

   at java.awt.LightweightDispatcher.dispatchEvent(

   at java.awt.Container.dispatchEventImpl(

   at java.awt.Window.dispatchEventImpl(

   at java.awt.Component.dispatchEvent(

   at java.awt.EventQueue.dispatchEvent(

   at java.awt.EventDispatchThread.pumpOneEventForHierarchy(

   at java.awt.EventDispatchThread.pumpEventsForHierarchy(

   at java.awt.EventDispatchThread.pumpEvents(


Anyone can help ?

Offline Jeff

JGO Coder

Got any cats?

« Reply #1 - Posted 2006-01-03 04:33:41 »

Whelp your SPhere has no render attributes to start with.

My suggestion is that you first work on just creating a graph with a sphere in it yo ucna see. Once you get that working then yo ucan the complexity of dynamically adding and removing it.

Got a question about Java and game programming?  Just new to the Java Game Development Community?  Try my FAQ.  Its likely you'll learn something!
Offline Mike Jacobs

Junior Devvie

« Reply #2 - Posted 2006-01-03 21:00:54 »

Is it possible that it has nothing to do with the sphere?  The exception could be related to the instance of the addObject class being added as a child to the new branch group.  Should this code:

obj.addChild (this);

be changed to:

It might be worth looking closer at the exception.


Special Effects for Java 3D games:
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Jeff

JGO Coder

Got any cats?

« Reply #3 - Posted 2006-01-03 21:03:54 »

The exception is a red herring.

Hes seeing that because he tried to add an already live branchgroup. (he tried to add it twice.)

His problem is that the branch group IS getting added but its not creating a total scenegraph that renders anything.  See all my suggestions above.

Got a question about Java and game programming?  Just new to the Java Game Development Community?  Try my FAQ.  Its likely you'll learn something!
Offline spytox4

Senior Newbie

« Reply #4 - Posted 2006-01-04 02:54:00 »

I've modified the code and I don' t have the exception anymore. But,  when i press the button several times :


action ajout


action ajout

Which seems to be normal.

look at the code hereafter (this is the complete class). The sphere is still not seen, but i've put some attributes to it.

import java.awt.*;
import java.awt.GraphicsConfiguration;
import java.awt.event.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.behaviors.keyboard.*;

import javax.vecmath.*;

import javax.swing.*;

public class Scene3Db extends JFrame implements ActionListener, MouseListener {

   private static final long serialVersionUID = 1L;
   private SimpleUniverse su;
    private BranchGroup sceneBG, mainBG, shapeBG, objRoot;
    private TransformGroup mainTG, shapeTG, cameraTG;
    private BoundingSphere bounds;
    private Material material2;
    private static int mycount = 1;

    //declaration des elements du gui
    private JLabel etiq1;

    private JCheckBox couleur;

    public Scene3Db() {
        Container contentPane = getContentPane();
        //BorderLayout bl = new BorderLayout();

        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        Canvas3D c = new Canvas3D(config);
        contentPane.add("Center", c);

        JPanel p1 = new JPanel();
        contentPane.add("North", p1);

        JPanel p2 = new JPanel();
        JButton ajout = new JButton("Ajout");
        addObject addObjBG = new addObject();
        //objRoot.addChild(addObjBG); //pb !
        contentPane.add("South", p2);

        SimpleUniverse su = new SimpleUniverse(c);
        BranchGroup scene = createSceneGraph(su);
        //scene.setCapability( BranchGroup.ALLOW_BOUNDS_READ );

        addWindowListener( new WindowAdapter() {
        public void windowClosing(WindowEvent e) {System.exit(0);}});

        setSize(800,600); //Taille Fenetre

    //création du graphe de scène
    public BranchGroup createSceneGraph(SimpleUniverse su) {

    //création d'un BG racine de l'arbre 3D
    BranchGroup objRoot = new BranchGroup();
    objRoot.setCapability( BranchGroup.ALLOW_PICKABLE_READ );
    objRoot.setCapability( BranchGroup.ALLOW_PICKABLE_WRITE );


        //création d'un bounds pour le fond et la lumière
        BoundingSphere bounds =
        new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
        Color3f bgColor = new Color3f(0.05f, 0.05f, 0.2f);
        Background bg = new Background(bgColor);

        Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f);
        Vector3f light1Direction  = new Vector3f(4.0f, -7.0f, -12.0f);

        DirectionalLight light1
            = new DirectionalLight(light1Color, light1Direction);

        BranchGroup sceneObj = new BranchGroup();

        //création d'un TG pour la gestion d'échelle
        TransformGroup objScale = new TransformGroup();
        Transform3D t3d = new Transform3D();

        //création d'un TG pour permettre la modification des objets visuels
        TransformGroup objTrans = new TransformGroup();

        MouseRotate myMouseRotate = new MouseRotate();
        myMouseRotate.setSchedulingBounds(new BoundingSphere());

        MouseTranslate myMouseTranslate = new MouseTranslate();
        myMouseTranslate.setSchedulingBounds(new BoundingSphere());

        MouseZoom myMouseZoom = new MouseZoom();
        myMouseZoom.setSchedulingBounds(new BoundingSphere());

        Vector3f translate = new Vector3f();
        Transform3D T3D = new Transform3D();
        TransformGroup TG = null;
        TransformGroup vpTrans = null;
        SharedGroup share = new SharedGroup();

        float[][] position = {{  0.0f, 0.0f,  -3.0f},
                              {  6.0f, 0.0f,   0.0f},
                              {  6.0f, 0.0f,   6.0f},
                              {  3.0f, 0.0f, -10.0f},
                              { 13.0f, 0.0f, -30.0f},
                              {-13.0f, 0.0f,  30.0f},
                              {-13.0f, 0.0f,  23.0f},
                              { 13.0f, 0.0f,   3.0f}};

        for (int i = 0; i < position.length; i++){
               TG = new TransformGroup(T3D);
                TG.addChild(new Link(share));
        vpTrans = su.getViewingPlatform().getViewPlatformTransform();
        translate.set( 0.0f, 0.3f, 0.0f);


        KeyNavigatorBehavior keyNavBeh = new KeyNavigatorBehavior(vpTrans);
        keyNavBeh.setSchedulingBounds(new BoundingSphere(new Point3d(),1000.0));

        //Canvas3D c = new Canvas3D(null);
        //PickHighlightBehavior pickBeh = new
                  //PickHighlightBehavior(c, objRoot, bounds);

        BranchGroup  b2 = new addObject();
        //System.out.println("br "+b2);
        return objRoot;

    public JPanel presentationPanel() {
   JPanel panel1 = new JPanel();
        etiq1 = new JLabel
        ("Modelisation d'un environnement naturel en 3D / © 2005 cnam ubo");

        return panel1;
        //fonction ajout d'objet
        private class addObject extends BranchGroup implements ActionListener {
                private addObject () {
                public void actionPerformed(ActionEvent event){
                      BranchGroup obj = new BranchGroup ();
                      // Création d'une sphère
                      Sphere sphere = new Sphere (0.3f, Sphere.GENERATE_NORMALS, 20);
                      Transform3D sphereRandromTransform = new Transform3D ();
                      sphereRandromTransform.setTranslation(new Vector3d(randomCoord(),randomCoord(),randomCoord()));
                      TransformGroup sphereTG = new TransformGroup (sphereRandromTransform);
                      System.out.println("action ajout");
        private double randomCoord () {
            double coord = Math.random();
            return coord>=0.5?-coord*5:coord*5;
        public void mouseClicked( MouseEvent e ) {
        public void mouseEntered( MouseEvent e ) {
        public void mouseExited( MouseEvent e ) {
        public void mousePressed( MouseEvent e ) {
        // if (e.getSource()==reset) {
        public void mouseReleased( MouseEvent e ) {
        //mode = STILL;
        public void actionPerformed(ActionEvent e) {
        Object target = e.getSource();
          if (target == couleur) {
            if (couleur.isSelected()){
        public static void main(String[] args) {

             try {
                  //Définition du type d'affichage boite de dialogue
      } catch (Exception exc) {
                  System.err.println("Erreur de chargement L&F: " + exc);
                new Scene3Db();

In fact I have this

java.lang.NullPointerException :

   at applet3d.Scene3Db.<init>(

   at applet3d.Scene3Db.main(

when I want to attach the new object to the main branchgroup

any idea ?

Offline Jeff

JGO Coder

Got any cats?

« Reply #5 - Posted 2006-01-06 19:26:14 »

Whats at line 66?

(I really dont want to have to manually count your liens and could be off doing that anyway dependign on how the code pasted.)


Got a question about Java and game programming?  Just new to the Java Game Development Community?  Try my FAQ.  Its likely you'll learn something!
Pages: [1]
  ignore  |  Print  

hadezbladez (712 views)
2018-11-16 13:46:03

hadezbladez (355 views)
2018-11-16 13:41:33

hadezbladez (699 views)
2018-11-16 13:35:35

hadezbladez (175 views)
2018-11-16 13:32:03

EgonOlsen (2368 views)
2018-06-10 19:43:48

EgonOlsen (2502 views)
2018-06-10 19:43:44

EgonOlsen (1465 views)
2018-06-10 19:43:20

DesertCoockie (2131 views)
2018-05-13 18:23:11

nelsongames (1927 views)
2018-04-24 18:15:36

nelsongames (2600 views)
2018-04-24 18:14:32
Deployment and Packaging
by mudlee
2018-08-22 18:09:50

Java Gaming Resources
by gouessej
2018-08-22 08:19:41

Deployment and Packaging
by gouessej
2018-08-22 08:04:08

Deployment and Packaging
by gouessej
2018-08-22 08:03:45

Deployment and Packaging
by philfrei
2018-08-20 02:33:38

Deployment and Packaging
by philfrei
2018-08-20 02:29:55

Deployment and Packaging
by philfrei
2018-08-19 23:56:20

Deployment and Packaging
by philfrei
2018-08-19 23:54:46 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!