title: What is the syntax for a mouseListener when using acm.graphics
body: <p>I have a "button" which is just a <code>GRect</code> from the <a href="http://cs.stanford.edu/people/eroberts/jtf/javadoc/student/acm/graphics/" rel="nofollow noreferrer">ACM Graphics Library</a>. It has an inherited method <code>addMouseListener</code> which I have tried (and failed) using. I need to know the syntax so that when someone clicks on the "button" I can invoke another method which resides in the same class. </p>
  
  <p>I want to know:</p>
  
  <ol>
  <li>Is it <code>ButtonName.addMouseListener</code> or <code>addMouseListener(ButtonName)</code></li>
  <li>Can I put the line mentioned above right after I create the button?</li>
  <li>What is the syntax that allows a click on the button to <em>call</em> something?</li>
  <li>Where is the syntax in question 3 supposed to go? Does it have its own class?</li>
  </ol>
  
  <p>My truncated code: </p>
  
  <pre><code>import acm.graphics.*;
  import acm.program.*;
  import acm.util.*;
  import java.applet.*;
  import java.awt.*;
  import java.awt.event.*;
  import java.lang.*;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  public class Shooter extends GraphicsProgram
  
  {
  …
  public GRect newShotB;
  …
  public void run()
      {        
          test = new GLabel("start",printx+75,100);
          add(test);  
          setup();
          test.setLabel("runing");
          fire();
          test.setLabel("Waiting");
          newShotB.addMouseListener(new MouseAdapter()
          {
                  @Override
                  public void mouseClicked(MouseEvent arg0) {
                      test.setLabel("clicked");
                      fire();
                  }
              });        
      }
  }
  </code></pre>
  
  <p>My full code:</p>
  
  <pre><code>import acm.graphics.*;
  import acm.program.*;
  import acm.util.*;
  import java.applet.*;
  import java.awt.*;
  import java.awt.event.*;
  import java.lang.*;
  import java.awt.event.MouseAdapter;
  import java.awt.event.MouseEvent;
  /**
   * Write a description of class Shooter here.
   * 
   * @author (your name) 
   * @version (a version number or a date)
   */
  public class Shooter extends GraphicsProgram
  {
      // instance variables - replace the example below with your own
      private static final int width = 400;       // Width of Canvas
      private static final int height = 600;      // Height of canvas
      private static final int BALL_Radius = 30;  // radius of the Ball
      public int startxpos = 10;                  // starting xpos
      public int startypos =  400;                // starting ypos            
      public double xpos = startxpos;             // x position of gp
      public double ypos = startypos;             // y postion of gp
      public double t;                            // Time (for equations)
      public int score;                           // Score Aquired
      public int force;                           // Magnitude of Velocity
      public double angleR;                       // Angle in Radianss
      public double angleD;                       // Angle in Degrees
      public GLabel anglePrint;                   // Print out of angle
      public GLabel xposPrint;                    // Print out of x pos
      public GLabel yposPrint;                    // Print out of y pos
      public GLabel scorePrint;                   // Print out of score
      public GLabel timePrint;                    // Print out of t
      public GLabel nSBPrint;
      public GLabel test;
      public GOval gp;                            // The game Piece
      public GLine ground;                        // The Line that is the ground
      public GRect newShotB;                      // New Shot Button
      public GRect trusShotB;                     // New TrusShot Button
  
      public int printx = 25;                     // X Position of Glabels
      public int printy = 25;                     // Y position of Glabels
  
  
      /*
      public static void main(String[] ags)
      {
          String[] sizeArgs = { "width=" + WIDTH, "height= " +HEIGHT};
          new Shooter().start(sizeArgs);
      }
      */
      /**
       * Constructor for objects of class Shooter
       */
      public Shooter()
      {   
      }
      public void run()
      {        
          test = new GLabel("start",printx+75,100);
          add(test);  
          setup();
          test.setLabel("runing");
          fire();
          test.setLabel("Waiting");
          newShotB.addMouseListener(new MouseAdapter()
          {
                  @Override
                  public void mouseClicked(MouseEvent arg0) {
                      test.setLabel("clicked");
                      fire();
                  }
              });        
      }
  
      public void setup()
      {
          timePrint = new GLabel ("Time:  "+String.valueOf(t),printx, printy);
          add(timePrint);
  
          anglePrint = new GLabel("Angle: "+String.valueOf(angleD), printx, printy+10);
          add(anglePrint);
  
          xposPrint = new GLabel ("x-pos: "+String.valueOf(xpos), printx, printy+20);
          add(xposPrint);
  
          yposPrint = new GLabel ("y-pos: "+String.valueOf(ypos), printx, printy+30);
          add(yposPrint);
  
          scorePrint = new GLabel("Score: "+String.valueOf(score), printx, printy+40);                
          add(scorePrint);
  
          ground = new GLine(10,startypos + BALL_Radius, 300, startypos + BALL_Radius);
          add(ground);
  
          GRect newShotB = new GRect (printx, 100, 50, 20);
          newShotB.setFilled(true);
          newShotB.setColor(Color.green);
          add(newShotB);
  
          nSBPrint = new GLabel ("New Shot",printx ,100);
          add(nSBPrint);
  
          gp = new GOval(startxpos,startypos,BALL_Radius, BALL_Radius);
          gp.setFilled(true);
          gp.setVisible(true);
          gp.setColor(Color.blue);
          add(gp);
  
          //trusShotB = new GRect (printx, 150, 50, 20);
          //trusShotB.setFilled(true);
          //trusShotB.setColor(Color.green);
          //add(trusShotB);
  
  
  
          test.setLabel("endStart");
  
      }
          public void setpar()
      {
  
  
      }
  
      public void fire()
      {
          test.setLabel("Firing");
          ypos = startypos;
          xpos = startxpos;        
          double vx;// = 10;
          double vy;// = 50;
          angleD = 45;
          force =50; 
  
          angleR = Math.toRadians(angleD);
          vx = (Math.cos(angleR)*force);
          vy = (Math.sin(angleR)*force); 
          t = 0;
          while (ypos&lt;=startypos)
          {
              xpos=startxpos+vx*t;
              ypos=startypos-(vy*t+.5*(-9.8)*t*t);
              gp.setLocation(xpos,ypos);
              waitTime();
              timePrint.setLabel(String.valueOf(t));
          }
          test.setLabel("fired");
          gp.setVisible(false);
  
      }
      public void trusShot()
      {
          int sl= 20; //sidelength of the Truss
          int h = 100;// hight of truss
          int d = 200; //distance of truss from edgee
          GRoundRect t = new GRoundRect(sl, sl, h, d);
          t.setColor(Color.gray);
  
      }
      public void waitTime()
      {
          int waitTime = 100;
          try
          {
              Thread.sleep(waitTime);
          }
          catch(Exception e)
          {
              //ignoring
          }
          t = t+(waitTime/1000.0);
      }
      public void changeColor()
      {
          if(gp.getColor() == Color.red){
              gp.setColor(Color.blue);}
          else if (gp.getColor() == Color.blue)    
          {
              gp.setColor(Color.red);
          }
      }
      public void raiseAngle()
      {
          angleD = angleD +1;
      }
      public void lowerAngle()
      {
          angleD = angleD -1;
      }
  }
  </code></pre>