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){
missingsuper.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);
}
}