gpt4 book ai didi

java - 使用 acm.graphics 时 mouseListener 的语法是什么

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:46 27 4
gpt4 key购买 nike

我有一个“按钮”,它只是 ACM Graphics Library 中的一个 GRect 。它有一个继承的方法addMouseListener,我已经尝试过使用它(但失败了)。我需要知道语法,以便当有人单击“按钮”时我可以调用驻留在同一类中的另一个方法。

我想知道:

  1. ButtonName.addMouseListener还是addMouseListener(ButtonName)
  2. 我可以在创建按钮后立即放置上述行吗?
  3. 允许单击按钮调用某些内容的语法是什么?
  4. 问题 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
}
});

您还可以使用已经实现了MouseListener所有方法的MouseAdapter,即:

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

关于java - 使用 acm.graphics 时 mouseListener 的语法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22264915/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com