Java 如何让圆圈通过鼠标移动来改变颜色

Java 如何让圆圈通过鼠标移动来改变颜色,java,swing,user-interface,Java,Swing,User Interface,我想设置一个圆圈网格(不重叠),这样当鼠标指针指向其中一个圆圈时,该圆圈就会改变颜色。我已经进行了试验,目前有两种选择: 使用容器,例如JPanel。使用MouseMotionListener.mouseMoved(MouseEvent e)随时获取鼠标指针的x和y坐标。然后,如果坐标位于其中一个圆内,请使用repaint()重新绘制整个容器 将每个圆设置为一个容器。使用MouseListener.mouseEntered(MouseEvent e)检测鼠标指针何时在圆上移动。然后仅重新绘制该容

我想设置一个圆圈网格(不重叠),这样当鼠标指针指向其中一个圆圈时,该圆圈就会改变颜色。我已经进行了试验,目前有两种选择:

  • 使用容器,例如JPanel。使用MouseMotionListener.mouseMoved(MouseEvent e)随时获取鼠标指针的x和y坐标。然后,如果坐标位于其中一个圆内,请使用repaint()重新绘制整个容器

  • 将每个圆设置为一个容器。使用MouseListener.mouseEntered(MouseEvent e)检测鼠标指针何时在圆上移动。然后仅重新绘制该容器

  • #2是最好的方法吗?如果是,如何设置圆形容器?有没有比上述两种方法更好的方法

    如果是,如何设置圆形容器

    退房


    您可以使用
    ShapeComponent
    创建与组件类似的圆。因此,您可以像使用任何其他Swing组件一样构建网格。

    可以通过覆盖创建非矩形组件。这是否是更好的选择取决于您的需要(您也不需要在第一种情况下重新绘制整个面板-只需使用指定边界的
    repaint()
    变量,并使面板足够智能以优化局部绘制)。@mlm我个人同意第一种方法。我只是想得更远一点。想象一下有一个1000x1000的网格。这将是100万个组件。如果你只想改变它们的颜色而不想做其他事情,我认为没有必要有这么多的物体。(在第二种方法中)似乎您计划拥有这么多对象,只是为了利用它们的鼠标输入行为(除此之外,您不需要它们成为组件)。使用第一种方法时,您不需要维护这么多对象(圆),基本上只需重新绘制需要重新绘制的区域。(这正是您想要的)。这可能对两种方法都有帮助。感谢kiheru和用户3437460-这都非常有用。这有点牵扯(因为它正在解决另一个问题),但类似或可能会给您一些想法