What is the syntax for a mouseListener when using acm.graphics

不问归期 提交于 2019-12-11 11:42:36

问题


I have a "button" which is just a GRect from the ACM Graphics Library. It has an inherited method addMouseListener 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.

I want to know:

  1. Is it ButtonName.addMouseListener or addMouseListener(ButtonName)
  2. Can I put the line mentioned above right after I create the button?
  3. What is the syntax that allows a click on the button to call something?
  4. Where is the syntax in question 3 supposed to go? Does it have its own class?

My truncated 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();
                }
            });        
    }
}

My full 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<=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;
    }
}

回答1:


According to the documentation of addMouseListener() you add an implementation of MouseListener to a GObject, GRect in particular. Here is an example that adds an anonymous listener:

rect.addMouseListener(new MouseListener() {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }
}); 

You can also use MouseAdapter that already implements all methods of MouseListener, ie:

rect.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }
});

Or a non anonymous case:

class CustomListener extends MouseAdapter {
    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub
    }
}

CustomListener listener = new CustomListener();
rect.addMouseListener(listener);

Here is a simple demo program that changes GRect's color on click:

import acm.program.*;
import acm.util.RandomGenerator;
import acm.graphics.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class TestRect extends GraphicsProgram {
    private static RandomGenerator rand = new RandomGenerator();

    public void run() {
        final GRect rect = new GRect(10, 10, 100, 100);
        rect.setFilled(true);
        rect.setColor(Color.RED);
        add(rect);

        rect.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg0) {
                rect.setColor(rand.nextColor());
            }
        });
    }
}



回答2:


i think that you could use GMouseEvent for this task for more information you can check the next link:

http://www.matcmp.ncc.edu/~sherd/classdoc/cmp211/cs2Programs/doc/acm/graphics/GMouseEvent.html



来源:https://stackoverflow.com/questions/22264915/what-is-the-syntax-for-a-mouselistener-when-using-acm-graphics

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!