Java 在不扩展Swing组件的情况下添加MouseListener

Java 在不扩展Swing组件的情况下添加MouseListener,java,swing,mouselistener,Java,Swing,Mouselistener,我想做一个关于学术的小游戏。我想做的是让任意数量的球在JPanel中移动,方向随机,但当我在球的内部单击时,它应该会显示出球的实际坐标。这是我没有move方法的类(我已经创建了它,但不需要为这个问题发布它): public类Ball实现Runnable{ int x=UserInterface.BALL\u START; int y=0; int size=10; 颜色; 公共舞会{ 随机=新随机(); int r,g,b; r=随机。下一个(256); g=随机。nextInt(256); b

我想做一个关于学术的小游戏。我想做的是让任意数量的球在
JPanel
中移动,方向随机,但当我在球的内部单击时,它应该会显示出球的实际坐标。这是我没有move方法的类(我已经创建了它,但不需要为这个问题发布它):

public类Ball实现Runnable{
int x=UserInterface.BALL\u START;
int y=0;
int size=10;
颜色;
公共舞会{
随机=新随机();
int r,g,b;
r=随机。下一个(256);
g=随机。nextInt(256);
b=随机。nextInt(256);
颜色=新颜色(r、g、b);
y=随机。下一个(500);
}
公开募捐{
intvx=(newrandom()).nextInt(10)+1;
while(x
如何将鼠标侦听器添加到ball类中,而不使其成为
JComponent
JLabel
JPanel

请参见并使用鼠标位置替换移动的小球,并调整
区域和
点的碰撞代码


该代码将可见部分渲染为标签中显示的图像。在保留大小的容器/布局/约束中显示标签,我们可以将鼠标侦听器直接添加到标签。

任何调用
paint
,都应注册为
MouseListener
,然后,它应该与球对话,找出它在哪里,并做任何你需要它来
公共虚空绘制的事情(图g){
missing
super.paint
@mKorbel不要错过super,因为我没有扩展任何内容该类的文档中有一个实现事件源的示例。当然,您需要一种机制将组件的鼠标事件转发到ball实例…@niarb 1。(您对“不扩展任何内容”的评论)没有什么会被画,2。我只想多个球随机移动-使用摆动计时器,1-5k的好主意与SSCCE/MCVE形式的代码示例在这里,
public class Ball implements Runnable {

    int x = UserInterface.BALL_START; 
    int y = 0;
    int size  = 10;     
    Color color;

    public Ball() {
        Random random = new Random();    
        int r, g, b;
        r = random.nextInt(256);
        g = random.nextInt(256);
        b = random.nextInt(256);
        color = new Color(r,g,b);
        y = random.nextInt(500);
    }

    public void run() {
        int vx = (new Random()).nextInt(10) + 1;                
        while (x < UserInterface.BALL_END) {
            x += vx;            
            try {
                Thread.sleep(15);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        x = UserInterface.BALL_END;
    }

    public int getX() {
        return x;
    }

    public void paint(Graphics g)  {
        g.setColor(color);
        g.fillOval(x - size / 2, y - size / 2, size, size);     
    }
}