java - 如何定义 java 组件以便它与鼠标监听器一起工作

标签 java swing jcomponent mouse-listeners

我有一个 Ball 类,我想扩展 JComponent 并实现 mouseListener。

public class Ball extends JComponent implements MouseListener {
    Int x, y, radius;

    public Ball(int X, int Y, int Radius){
        //contains only three ints and redefines x,y,radius
        x=X;
        y=Y;
        radius=Radius;
    }

    public void draw(Graphics g){
        //draw oval using x,y,radius
    }

    //5 mouselisteners undefined yet
}

所以 ball 是框架内面板使用的构造函数。

抱歉,我还没有输入所有代码。我将很快提交完整的代码。

所以我要做的是在球类中使用 MouseEntered 监听器,以便当鼠标进入组件(球/椭圆形)时。 但我不知道如何定义该组件以便它知道它已被输入。 需要一些尺寸吗?因为我所做的只是在面板中使用绘图功能。

最佳答案

如果这是我的类,我不会让它扩展 JComponent,也不会为其提供 MouseListener 或 MouseMotionListener,特别是当我想在单个 JComponent 中显示多个球时。相反,我会给它提供公共(public)方法,允许其他类获取其边界(例如可以从 Shape 接口(interface)获取),以及形状中是否包含某些内容(Shape 接口(interface)对此也很有效),以及其他公共(public)方法允许外部类更改此对象的状态(外观?)的方法。

然后我会让 JComponent 持有一个 Ball 或 ArrayList<Ball> ,并在此 JComponent 的 MouseListener/MouseMotionListener/MouseAdapter 中,迭代 ArrayList<Ball>查看鼠标是否在任何球的内部,如果是,则更改该球的状态。然后在 JComponent 的 PaintComponent 方法中,我将迭代 ArrayList<Ball>调用draw(g)在每个包含的球上。

关于java - 如何定义 java 组件以便它与鼠标监听器一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9397431/

相关文章:

java - 有人可以告诉我我做错了什么吗?通过 LinkedList 进行计数和循环

java - 分布式环境中的布隆过滤器

java - 动态格式化字段java

java - 十六进制 Jspinner 的一些提示?方法正确吗

java - 椭圆形最上面的五行被删除。为什么?

java - 用于图片类型检测的免费 java 库(人、动物、人脸、 body 、人像、风景……)

java - 如果有重复的代码或如果有重复的条件

java - 编辑 JTable 时 vector 类类型发生变化

Java 在窗口隐藏时将组件打印为图像

java - 将对象添加到 Swing 组件时,Java 在哪里复制和存储对象?