EventListener不在Java中的自定义组件上工作

EventListener不在Java中的自定义组件上工作,java,events,awt,Java,Events,Awt,我想画一个对鼠标事件有反应的形状, 我想扩展可以注册到事件侦听器的awt.component,但它不起作用,尽管它编译时没有错误 import java.awt.Component; import java.awt.event.*; class Ball extends Component{ public Ball(){ this.addMouseListener(new MouseAdapter(){ public void mousePres

我想画一个对鼠标事件有反应的形状, 我想扩展可以注册到事件侦听器的awt.component,但它不起作用,尽管它编译时没有错误

import java.awt.Component;
import java.awt.event.*;

class Ball extends Component{
    public Ball(){
        this.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                // Some event to be triggered
            }
        });
    }
}
下面是我正在使用appletviewer测试小程序的一个示例(用于学习目的):

仅当事件侦听器分配给小程序时,它才起作用,如下代码所示:

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.event.*;

public class Test extends Applet{
    Ball ball;

    public void init(){
        ball = new Ball();

        this.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                ball.x += 50;
                ball.y += 50;
                repaint();
            }
        });
    }


    public void paint(Graphics g){
        ball.paint(g);
    }
}

class Ball extends Component{
    int x, y;
    public Ball(){
        x = y = 50;
    }

    public void paint(Graphics g){
            g.fillOval(x, y, 25, 25);
        }

}

这是因为在
Ball
中调用
repait
方法时,只重新绘制
Ball
对象,而不重新绘制小程序屏幕

在小程序中添加方法时,它会重新绘制小程序屏幕

所以,你自己解决了这个问题。。。。你知道答案!我添加这个答案只是为了解释


或者,您需要在两者中添加
repait
,在
Ball
中更改位置,并在applet中重新绘制。

它在我的机器上工作,你能发布一个工作示例来看看你是如何使用Ball的吗?也许这有助于解决你的问题problem@JRowan我更新了一个我正在测试的简单示例,我是作为Java应用程序而不是Java小程序运行的,我不确定小程序,但也许这就是小程序类中鼠标侦听器的实现方式,但我可能错了
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Component;
import java.awt.event.*;

public class Test extends Applet{
    Ball ball;

    public void init(){
        ball = new Ball();

        this.addMouseListener(new MouseAdapter(){
            public void mousePressed(MouseEvent e){
                ball.x += 50;
                ball.y += 50;
                repaint();
            }
        });
    }


    public void paint(Graphics g){
        ball.paint(g);
    }
}

class Ball extends Component{
    int x, y;
    public Ball(){
        x = y = 50;
    }

    public void paint(Graphics g){
            g.fillOval(x, y, 25, 25);
        }

}