Java小程序鼠标侦听器不工作

Java小程序鼠标侦听器不工作,java,applet,mouseevent,Java,Applet,Mouseevent,我想我对它进行了编程,这样当我点击非1级或更高级别时出现的“开始”按钮时,它将进入1级。但当我点击它时,什么也没发生 导入java.applet.applet import java.awt.*; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt

我想我对它进行了编程,这样当我点击非1级或更高级别时出现的“开始”按钮时,它将进入1级。但当我点击它时,什么也没发生


导入java.applet.applet

import java.awt.*;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.net.URL;
import java.util.ArrayList;
import java.util.Random;
import java.awt.Font;

public class Move extends Applet implements KeyListener, MouseListener {
private Rectangle rect;
private ArrayList<Integer> keysDown;
Random randomGenerator = new Random();
int speed = 4;
int level = 0;
int xpos; 
int ypos; 
boolean startClicked; 
Image block;
Image start;
URL base;
MediaTracker mt; 
int randomx = randomGenerator.nextInt(560);
int randomy = randomGenerator.nextInt(360);


public void init() {
    this.addKeyListener(this);
    this.addMouseListener(this);
    keysDown = new ArrayList<Integer>();
    rect = new Rectangle(0, 0, 50, 50);      ///////////////////////////////////you can use rect.getX();
    mt = new MediaTracker(this); 
    try {
        base = getDocumentBase(); 
    } 
    catch (Exception e) {} 
    block = getImage(base, "block.gif");
    start = getImage(base, "start_button.png");
    mt.addImage(block, 1);
    try { 
        mt.waitForAll(); 
    } 
    catch (InterruptedException  e) {} 
}

public void paint(Graphics g) {
    setSize(600, 400);
    Graphics2D g2 = (Graphics2D)g;
    if (level != 0) {
        g2.fill(rect);
        //g.drawImage(block, randomx, randomy, this);      ###############################fhjvhfjvkjerhgvgf
        Font font = new Font("Arial", Font.BOLD, 18);
        g.setFont(font);
        String text = "Speed: " + speed;
        FontMetrics fm = g.getFontMetrics();
        int x = (getWidth() - fm.stringWidth(text)) / 2;
        int y = (getHeight() - fm.getHeight()) + fm.getAscent();
        g.drawString(text, x, y);
    }
    else { // start menu
        g.drawImage(start, 160, 160, this);
    }
}

@Override
public void keyPressed(KeyEvent e) {
    if (!keysDown.contains(e.getKeyCode()))
        keysDown.add(new Integer(e.getKeyCode()));
moveRect();
}

@Override
public void keyReleased(KeyEvent e) {
    keysDown.remove(new Integer(e.getKeyCode()));
}

public void moveRect() {
    if (level != 0) {
        int x = rect.x;
        int y = rect.y;
        if (keysDown.contains(KeyEvent.VK_UP)) {
            y -= speed;
        }
        if (keysDown.contains(KeyEvent.VK_DOWN)) {
            y += speed;
        }
        if (keysDown.contains(KeyEvent.VK_LEFT)) {
            x -= speed;
        }
        if (keysDown.contains(KeyEvent.VK_RIGHT)) {
            x += speed;
        }
        rect.setLocation(x, y);
        repaint();
        if (x-32 > randomx-72 && y+64 > randomy && x-32 < randomx+72 && y-64 < randomy) { /// will be flag
            randomx = randomGenerator.nextInt(560);
            randomy = randomGenerator.nextInt(360);
            speed += 4;
        }
    }
}

@Override
public void keyTyped(KeyEvent e) {}

@Override
public void mouseClicked(MouseEvent me) {
    if (level == 0) {
        xpos = me.getX(); 
        ypos = me.getY();
        if (xpos > 160 && ypos > 96 && xpos < 400 && ypos < 160) {
            level = 1;
        }
    }
}

@Override
public void mouseEntered(MouseEvent me) {
}

@Override
public void mouseExited(MouseEvent me) {
}

@Override
public void mouseReleased(MouseEvent me) {
}

@Override
public void mousePressed(MouseEvent me) {
}
}
import java.awt.*;
导入java.awt.event.InputEvent;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.Random;
导入java.awt.Font;
公共类移动扩展小程序实现KeyListener、MouseStener{
私有矩形矩形;
私有arraylistkeysdown;
Random randomGenerator=新的Random();
内速度=4;
智力水平=0;
int XPO;
int ypos;
布尔startClicked;
图像块;
图像启动;
URL库;
MediaTracker mt;
int randomx=randomGenerator.nextInt(560);
int randomy=randomGenerator.nextInt(360);
公共void init(){
this.addKeyListener(this);
这个。addMouseListener(这个);
keysDown=newarraylist();
rect=新矩形(0,0,50,50);//可以使用rect.getX();
mt=新MediaTracker(本);
试一试{
base=getDocumentBase();
} 
捕获(例外e){}
block=getImage(基,“block.gif”);
start=getImage(基,“start_button.png”);
addImage山(1号区块);
试试{
韦特福尔山();
} 
捕获(中断异常e){}
}
公共空间涂料(图g){
设置大小(600400);
图形2d g2=(图形2d)g;
如果(级别!=0){
g2.填充(rect);
//g、 绘图图像(块、随机、随机、此);(块、随机、此)
Font=新字体(“Arial”,Font.BOLD,18);
g、 setFont(字体);
String text=“速度:”+速度;
FontMetrics fm=g.getFontMetrics();
intx=(getWidth()-fm.stringWidth(text))/2;
int y=(getHeight()-fm.getHeight())+fm.getAscent();
g、 抽绳(文本,x,y);
}
else{//开始菜单
g、 drawImage(开始,160,160,本);
}
}
@凌驾
按下公共无效键(按键事件e){
如果(!keysDown.contains(例如getKeyCode()))
add(新的整数(例如getKeyCode());
moveRect();
}
@凌驾
公共无效密钥已释放(密钥事件e){
remove(新整数(例如getKeyCode());
}
公共void moveRect(){
如果(级别!=0){
int x=rect.x;
int y=矩形y;
if(keysDown.contains(KeyEvent.VK_UP)){
y-=速度;
}
if(keysDown.contains(KeyEvent.VK_DOWN)){
y+=速度;
}
if(keysDown.contains(KeyEvent.VK_左)){
x-=速度;
}
if(keysDown.contains(KeyEvent.VK_RIGHT)){
x+=速度;
}
直线定位(x,y);
重新油漆();
如果(x-32>randomx-72&&y+64>randomy&&x-32160&&ypos>96&&xpos<400&&ypos<160){
级别=1;
}
}
}
@凌驾
公共无效mouseenterned(MouseEvent me){
}
@凌驾
public void mouseexitted(MouseEvent me){
}
@凌驾
公共无效MouseEvent me(MouseEvent me){
}
@凌驾
public void mousePressed(MouseEvent me){
}
}

再次感谢您的帮助!这将有望成为一个迷宫游戏

PS:忽略那些毫无意义的评论。

你正在绘制的

g.drawImage(start, 160, 160, this);
但是检查

        if (xpos > 160 && ypos > 96 && xpos < 400 && ypos < 160) {
//


if(xpos>=(开始位置)&&ypos>=START_Y_POS&&xpos xpos<400&&ypos<190取决于图像尺寸+开始位置。因此,如果宽度为20,高度为30,则使用xpos,我想我应该说图像的大小。它是256x64像素。您应该添加一些记录器/系统输出println以查看变量的状态并进行调试
        if (xpos >= 160 && ypos > 159 && xpos < 400 && ypos < 190) {
   public static final int START_X_POS = 160;
   public static final int START_Y_POS = 160;

   public static final int START_WIDTH = 30;
   public static final int START_HEIGHT = 150;
        if (xpos >= (START_X_POS ) && ypos >= START_Y_POS  && xpos <= ( START_X_POS + START_WIDTH) && ypos <= (START_X_POS + START_HEIGHT )) {