我有一个“按钮”,它只是ACM Graphics Library中的GRect
。它有一个继承的方法addMouseListener
,我尝试过(但失败了)。我需要知道语法,以便当有人单击“按钮”时可以调用驻留在同一类中的另一种方法。
我想知道:
是ButtonName.addMouseListener
还是addMouseListener(ButtonName)
创建按钮后,可以立即在上面提到的行吗?
允许单击按钮调用某些内容的语法是什么?
问题3的语法应该去哪里?它有自己的课程吗?
我的截断代码:
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();
}
});
}
}
我的完整代码:
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;
}
}
最佳答案
根据addMouseListener()的文档,您将MouseListener
的实现添加到GObject
,尤其是GRect
。这是添加匿名侦听器的示例:
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
}
});
您还可以使用已经实现
MouseAdapter
所有方法的MouseListener
,即:rect.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
});
或非匿名案例:
class CustomListener extends MouseAdapter {
@Override
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}
CustomListener listener = new CustomListener();
rect.addMouseListener(listener);
这是一个简单的演示程序,可在单击时更改GRect的颜色:
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());
}
});
}
}