# warum funkt dieses Programm nicht? (Menübar, Java 3D)



## Maf (27. Feb 2008)

so:
hier der Quelltext:

```
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.behaviors.vp.*;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;





public class Transformat extends JFrame implements ActionListener
{

  public Canvas3D myCanvas3D;
  // Anfang Variablen

  private MenuBar jmb = new MenuBar();
  private Menu Korp = new Menu("Körper");
          MenuItem Con = new MenuItem("Kegel");
          MenuItem Wurf = new MenuItem("Würfel");
  private Menu Tran = new Menu("Transformieren");
          MenuItem Rotate = new MenuItem("Rotieren");
          MenuItem Trans = new MenuItem("Translation");
          MenuItem Skale = new MenuItem("Skalierung");
          MenuItem Scher = new MenuItem("Scherung");
  private Menu Datei = new Menu("Datei");
          MenuItem Ende = new MenuItem("Ende");
          MenuItem clear = new MenuItem("Löschen");
          
          
          
          Appearance blau = new Appearance();
          BranchGroup scene = new BranchGroup();
          Appearance rot = new Appearance ();
           BranchGroup conGroup = new BranchGroup();
           BranchGroup boxGroup = new BranchGroup();
           Transform3D ROTA = new Transform3D();
           Transform3D TRANS = new Transform3D();
           TransformGroup rota = new TransformGroup(ROTA);
           TransformGroup trans = new TransformGroup(TRANS);
  // Ende Variablen

  public Transformat()
  {


   setMenuBar(jmb);
    jmb.add(Tran);
    Tran.add(Rotate);
    Rotate.addActionListener(this);
    Tran.add(Trans);
    Trans.addActionListener(this);
    Tran.add(Skale);
    Skale.addActionListener(this);
    Tran.add(Scher);
    Scher.addActionListener(this);


    jmb.add(Korp);
    Korp.add(Con);
    Korp.add(Wurf);
    Con.addActionListener (this);
    Wurf.addActionListener (this);
    
    jmb.add(Datei);
    Datei.add(Ende);
    Datei.add(clear);
     Ende.addActionListener (this);
     clear.addActionListener (this);
     
     
    //Standardeinstellung fuer das Betrachteruniversum
    myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());


    //Aufbau des SimpleUniverse:
    //Zuerst Erzeugen zusammen mit dem Canvas
    SimpleUniverse simpUniv = new SimpleUniverse(myCanvas3D);

    //Standardpositionierung des Betrachters
    simpUniv.getViewingPlatform().setNominalViewingTransform();

    //Die Szene wird in dieser Methode erzeugt.
    createSceneGraph(simpUniv);

    //Hinzufuegen von Licht
    addLight(simpUniv);


    //Hierdurch kann man mit der Maus den Betrachterstandpunkt veraendern
      OrbitBehavior ob = new OrbitBehavior(myCanvas3D);
      ob.setSchedulingBounds(new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE));
      simpUniv.getViewingPlatform().setViewPlatformBehavior(ob);


    //Darstellung des Canvas/Fensters:
    setTitle("Transformationen");
    setSize(1000,800);
    getContentPane().add("Center", myCanvas3D);
    setVisible(true);
  }

   public static void main(String[] args)
  {
     Transformat staticScene = new Transformat();
  }

  //In dieser Methode werden die Objekte der Szene aufgebaut und dem
  //SimpleUniverse su hinzugefuegt.
  public void createSceneGraph(SimpleUniverse su)
  {

    setToMyDefaultAppearance(blau,new Color3f(0.0f,0.0f,0.8f),new Color3f(0.0f,0.0f,0.5f));
    setToMyDefaultAppearance(rot,new Color3f(0.8f,0.0f,0.0f),new Color3f(0.5f,0.0f,0.0f));

    //float Kante=0.2f;
    //Cone Cone = new Cone(0.1f,0.8f,myApp);
    //Box Wuerfel = new Box(Kante,Kante,Kante,MyApp);
//*** Die Wurzel des Graphen, der die Szene enthaelt. ***

             //Die folgenden drei Zeilen erzeugen einen weißen Hintergrund.
             Background bg = new Background(new Color3f(1.0f,1.0f,1.0f));
             BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
             bg.setApplicationBounds(bounds);
             scene.addChild(bg);
             scene.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
             scene.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
             scene.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
             scene.setCapability(BranchGroup.ALLOW_DETACH);
             boxGroup.setCapability(BranchGroup.ALLOW_DETACH);
             conGroup.setCapability(BranchGroup.ALLOW_DETACH);

            scene.addChild(rota);
            scene.addChild(trans);
             

             
             scene.compile();
             su.addBranchGraph(scene);

   }

    public static void setToMyDefaultAppearance(Appearance blau, Color3f col, Color3f col2)
  {
    blau.setMaterial(new Material(col,col2,col,col,100.0f));

  }
//  public static void setToMyDefaultAppearance(Appearance rot, Color3f col, Color3f col2)
  {

  }


   public void addLight(SimpleUniverse su)
  {

    BranchGroup bgLight = new BranchGroup();

    BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), Double.MAX_VALUE);
    Color3f lightColour1 = new Color3f(1.0f,1.0f,1.0f);
    Vector3f lightDir1  = new Vector3f(-1.0f,0.0f,-0.5f);
    DirectionalLight light1 = new DirectionalLight(lightColour1, lightDir1);
    light1.setInfluencingBounds(bounds);


    Vector3f lightDir2  = new Vector3f(0.5f,0.0f,1.0f);
    DirectionalLight light2 = new DirectionalLight(lightColour1, lightDir2);
    light2.setInfluencingBounds(bounds);


    bgLight.addChild(light1);
    bgLight.addChild(light2);

    su.addBranchGraph(bgLight);
  }
  public void actionPerformed (ActionEvent e)
  { String Klick = e.getActionCommand();

     if (Klick == "Kegel")
   {
      conGroup.addChild(new Cone(0.1f,0.8f,blau));
      scene.addChild(conGroup);
   }
    if (Klick == "Würfel")
   {
      float Kante = 0.2f;
      boxGroup.addChild(new Box(Kante,Kante,Kante,rot));
      scene.addChild(boxGroup);
   }
    if (Klick == "Rotieren")
    {
        scene.removeChild(boxGroup);
        scene.removeChild(conGroup);
        trans.removeChild(conGroup);
        trans.removeChild(boxGroup);
        rota.addChild(conGroup);
        rota.addChild(boxGroup);

        ROTA.rotZ(Math.PI/6);
         scene.addChild(rota);
    }

   if (Klick =="Translation")
   {
        scene.removeChild(boxGroup);
        scene.removeChild(conGroup);
        rota.removeChild(conGroup);
        rota.removeChild(boxGroup);
        trans.addChild(boxGroup);
        trans.addChild(conGroup);
        TRANS.setTranslation(new Vector3f(10f,10f,10f));
        scene.addChild(trans);
   }

   if (Klick == "Ende")
   {
      System.exit(0);
   }


    
  }
  
  
  
  
}
```
so
ob das jetz sehr effektiv ist etc. kümmere ich mich erstmal nicht.
ich möchte nur das der mir das auf klick trnslatiert und rotiert...weiss aber nicht warum das nicht funktioniert
wär nett wenn ihr mir helfen könntet


----------



## SlaterB (27. Feb 2008)

und du willst nicht näher beschreiben WAS nicht geht?
z.B. Fehlermeldung, ActionListener reagiert nicht, Zeichnung wird durchgeführt aber nix zu sehen oder sonstwas?


> Klick == "Kegel"

Strings vergleicht man mit equals()


----------



## Guest (27. Feb 2008)

ähm bei mir funkt soweit alles
nur der transformiert die dinger nich

das mit equal is mir ersma egal
das geht auch so...


----------

