Ollis: MouseListener auf Box setzen

Hallo,

ich versuche schon seit 2 Stunden, auf meine Box einen MouseListener anzuwenden. Ich weiß aber absolut nicht weiter. Hab schon einiges probiert, was ich so im Netz gefunden habe, aber nichts hat funktoniert.

Das ganze sieht so momentan aus:

Appearance app_box = new Appearance();
   ColoringAttributes c_box = new ColoringAttributes();
   c_box.setColor(0f,1.0f,0f);
   app_box.setColoringAttributes(c_box);
  Box box = new Box(0.3f, 0.3f, 0.3f, app_box);

theModel.addChild(box);    // theModel = TransformGroup
  objRotate.addChild(theModel);   //objRotate = TransformGroup

Nun wollte ich (wie man es bei einem Button macht):
            box.addMouseListener(this)
schreiben, aber das geht natürlich nicht. Wie setze ich denn darauf einen MouseListener???

Wäre für Hilfe dankbar!

Gruss Ollis

  1. Hej,

    Nun wollte ich (wie man es bei einem Button macht):
                box.addMouseListener(this)
    schreiben, aber das geht natürlich nicht.

    Die Fehlerbeschreibung "Geht nicht" wird nicht dadurch besser, dass man den Helfenden mit dem Zusatz "natürlich" einschüchtert.

    Was geht nicht?

    Da javax.swing.Box von javax.awt.Component erbt, steht auch die Methode addMouseListener(java.awt.event.MouseListener l) zur Verfügung.

    box.addMouseListener(this)

    Wer ist denn this ?

    Beste Grüße
    Biesterfeld

    --
    "Nein! ... Nein, schneller, leichter, verführerischer die dunkle Seite ist."
    1. Hej,

      Die Fehlerbeschreibung "Geht nicht" wird nicht dadurch besser, dass man den Helfenden mit dem Zusatz "natürlich" einschüchtert.

      Was geht nicht?

      box.addMouseListener(this)

      Genau das geht eben nicht!! Ich habe den MouseListener implementiert
      public class test implements MouseListener {...

      Wer ist denn this ?

      dieses this habe ich aus einer Seite aus dem Web, wo ein Mouselistener implementiert wird. Ich glaube, dieses this bezog sich darauf, dass die MouseEvents in derselben Klasse bearbeitet wurden.

      Gruss Ollis

      1. Hej,

        box.addMouseListener(this)
        Genau das geht eben nicht!!

        WAS geht nicht?

        [ ] Du schaffst es nicht, die Tastatur richtig zu bedienen um die Zeichenfolge 'box.addMouseListener(this)' zu schreiben.
        [ ] Der Compiler gibt eine Fehlermeldung aus.
        [ ] Die von dir implementierten Methoden des MouseListeners werden bei dem entsprechenden MouseEvent nicht oder nur falsch ausgeführt.

        Ich habe den MouseListener implementiert

        public class test implements MouseListener {...

        Gut, gut. Also neben einer konkreten Fehlerbeschreibung wäre vielleicht auch einfach mal etwas mehr _relevanter_ Code brauchbar. Bitte poste doch mal die  Klasse mit allen relevanten Methoden, Konstruktoren und Feldern. Insbesondere die Methoden des MouseListeneres wären interessant.

        Ich glaube, dieses this bezog sich darauf, dass die MouseEvents in derselben Klasse bearbeitet wurden.

        Ich weiß nicht ob du das richtige meinst, aber es heisst, dass die die Box bauende Klasse selber auch die MouseEvents abfängt und viel wichtiger auch verarbeitet.

        Beste Grüße
        Biesterfeld

        --
        "Nein! ... Nein, schneller, leichter, verführerischer die dunkle Seite ist."
        1. Hier der komplette Code (ich hab die Imports weggelassen, weil das ne ewig lange Liste ist, aber alles was importiert werden muss hierfür wurde importiert):

            
          public class test extends Applet {  
            
           public BranchGroup deswirdBG(Canvas3D canvas){  
            BranchGroup meineBG=new BranchGroup();  
            
          //  ---------------------------------------------------------------------------  
            TransformGroup objRotate = null;  
            Transform3D transform = new Transform3D();  
            transform.setTranslation(new Vector3f(0.6f, 0.0f, 0.6f));  
            
                  objRotate = new TransformGroup(transform);  
                  objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);  
                  objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);     //Erlaubt die Veränderung durch die PickBehavior Objekte  
                  objRotate.setCapability(TransformGroup.ENABLE_PICK_REPORTING);  
          //------------------------------------------------------------------------------  
                  Inspector3DS loader=new Inspector3DS("./mon.3ds");  
                  loader.setTextureLightingOn();  
                  loader.setTexturePath("./");  
                  loader.parseIt();  
                  TransformGroup theModel=loader.getModel();  
            
            
          // *******     ------------------------------------------------------------------------------  
            Appearance app_box = new Appearance();  
             ColoringAttributes c_box = new ColoringAttributes();  
             c_box.setColor(0f,1.0f,0f);  
             app_box.setColoringAttributes(c_box);  
            Box box = new Box(0.9f, 0.3f, 0.3f, app_box);  
            
             box.addMouseListener(new MyMouseListener());  
          // Und genau dieses box.addMouseListener: ich darf hier keinen addMouseListener anfügen, weil er dann rummault!  
          //Fehler: The method addMouseListener(MyMouseListener) is undefined for the type Box  
            
            
            
            theModel.addChild(box);  
            objRotate.addChild(theModel);  
            meineBG.addChild(objRotate);  
          // *******    ------------------------------------------------------------------------------  
          //      ------------------------------------------------------------------------------  
                  AmbientLight meinLicht=new AmbientLight(true,new Color3f(1.0f,1.0f,1.0f));  
                  meinLicht.setInfluencingBounds(new BoundingSphere(new Point3d(),10000.0f));  
                  meineBG.addChild(meinLicht);  
          //      ------------------------------------------------------------------------------  
            Background meinBack=new Background(new Color3f(1.0f,1.0f,1.0f));  
            meinBack.setApplicationBounds(new BoundingSphere(new Point3d(), 1000.0f)); //Steuert den hintergrund  
            meineBG.addChild(meinBack);  
          //---------------------------------------------------------------------------  
            
            
            BoundingSphere behaveBounds = new BoundingSphere();  
            PickRotateBehavior pickRotate = new PickRotateBehavior(meineBG, canvas, behaveBounds);  
                  PickTranslateBehavior pickTrans = new PickTranslateBehavior(meineBG, canvas, behaveBounds);  
                  PickZoomBehavior pickZoom = new PickZoomBehavior(meineBG, canvas, behaveBounds);  
                  meineBG.addChild(pickRotate);  
                  meineBG.addChild(pickTrans);  
                  meineBG.addChild(pickZoom);  
            
            meineBG.compile();  
                  return meineBG;  
           }  
            
           public test(){  
            setLayout(new BorderLayout());  
                  GraphicsConfiguration config =  
                     SimpleUniverse.getPreferredConfiguration();  
                  Canvas3D canvas3D = new Canvas3D(config);  
                  add("Center", canvas3D);  
                  SimpleUniverse simpleU = new SimpleUniverse(canvas3D);  
                  BranchGroup scene = deswirdBG(canvas3D);  
                  simpleU.getViewingPlatform().setNominalViewingTransform();  
            //-----------------------------------------------------------------------------------------  
                  TransformGroup vpTrans=simpleU.getViewingPlatform().getViewPlatformTransform();  
                  Vector3f translate=new Vector3f();  
                  translate.set(0,0,15);  
                  Transform3D T3D=new Transform3D();  //Bewegt den Punkt des Betrachters an jede beliebige Stelle  
                  T3D.setTranslation(translate);  
                  vpTrans.setTransform(T3D);  
            //----------------------------------------------------------------------------------  
            
                  simpleU.addBranchGraph(scene);  
            
           }  
           public static void main(String[] args){  
            Frame frame=new MainFrame(new test(),500,500);  
           }  
          }  
            
          class MyMouseListener extends MouseAdapter {  
           public void mousePressed(MouseEvent event) {  
            System.out.println("Mouse Pressed!");  
           }  
            
           public void mouseClicked(MouseEvent e) {  
            System.out.println("Mouse Clicked!");  
           }  
           public void mouseEntered(MouseEvent e) {  
            System.out.println("Mouse Entered!");  
           }  
           public void mouseExited(MouseEvent e) {  
            System.out.println("Mouse Exited!");  
           }  
           public void mouseReleased(MouseEvent e) {  
            System.out.println("Mouse Released!");  
           }  
          }  
            
          
          
          1. Hej,

            Hier der komplette Code

            Arrgh, du kennst den Unterschied zwischen kompletten und relevanten Code?
            Und bitte verstecke die relevante Fehlermeldung nicht in einem Kommentar.

            Also darum geht es:

              
            public class test extends Applet {  
              
              Appearance app_box = new Appearance();  
              app_box.setColoringAttributes(c_box);  
              Box box = new Box(0.9f, 0.3f, 0.3f, app_box);  
              box.addMouseListener(new MyMouseListener());  
              // Und genau dieses box.addMouseListener: ich darf hier keinen addMouseListener anfügen, weil er dann rummault!  
              //Fehler: The method addMouseListener(MyMouseListener) is undefined for the type Box  
              
            }  
              
            class MyMouseListener extends MouseAdapter {  
              
              public void mousePressed(MouseEvent event) {  
                System.out.println("Mouse Pressed!");  
              }  
              
              public void mouseClicked(MouseEvent e) {  
                System.out.println("Mouse Clicked!");  
              }  
              
              public void mouseEntered(MouseEvent e) {  
                System.out.println("Mouse Entered!");  
              }  
              
              public void mouseExited(MouseEvent e) {  
                System.out.println("Mouse Exited!");  
              }  
              
              public void mouseReleased(MouseEvent e) {  
                System.out.println("Mouse Released!");  
              }  
            }  
            
            

            ich hab die Imports weggelassen

            So genau diese wären allerdings wiederrum interessant gewesen, weil:

            1.) Das seh ich ja erst jetzt, aber javax.swing.Box kennt keinen Konstruktor Box(float f1, float f2, float f3, Appearance a).
            2.) Weder java noch javax kennen eine Klasse Appearance.

            Aber eines kann ich dir mit sehr großer Sicherheit sagen: Die von dir verwandte Box kennt keine Methode addMouseListener(MouseListener l). Damit ist auszuschließen, dass sie in einem direktem Verwandschaftsverhältnis zu java.awt.Component steht.

            Beste Grüße
            Biesterfeld

            --
            "Nein! ... Nein, schneller, leichter, verführerischer die dunkle Seite ist."
            1. Ahh, ich glaub jetzt versteh ich, wo das Verständnisproblem liegt.

              Also das alles ist eine J3D-Anwendung (wenn man das Anwendung nennen kann). Alles was ich machen will: Einer Box (aus J3D) einen MouseListener zuweisen.

              import javax.media.j3d.*
              import com.sun.j3d.utils.geometry.Box;

              sind so die wesentlichen Imports hierbei.

              1. Hej,

                Also das alles ist eine J3D-Anwendung (wenn man das Anwendung nennen kann). Alles was ich machen will: Einer Box (aus J3D) einen MouseListener zuweisen.

                Also, um es vorwegzusagen, mit GUIs hab ich mich bisher sogut wie gar nicht auseinander gesetzt. Von j3d hab ich entsprechend gar keine Ahnung.

                Was soll denn der MouseListener veranlassen? Hab mich ein wenig durch com.sun.j3d-API  gekämpft und bin nicht wirklich durchgestiegen. Nur soviel: vielleicht sind ja die pickings- und behaviours-Pakete für dich von Interesse.

                Jedenfalls sieht die Box es nicht vor, sich einfach mal so nen MouseListener aufschwatzen zu lassen.

                So sorry. Werd jetzt bubu machen, also geruhsame n8

                Beste Grüße
                Biesterfeld

                --
                "Nein! ... Nein, schneller, leichter, verführerischer die dunkle Seite ist."