2015-11-06 55 views
1

我想设置一个圆圈的网格(非重叠),以便当鼠标指针位于其中一个圆圈上时,该圆圈会改变颜色。我已经进行了实验,到目前为止有两种选择:如何让圈子用鼠标改变颜色

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

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

#2是最好的方法吗?如果是这样,我该如何设置一个圆形容器?有没有比上述任何一种更好的方法?

+1

通过重写[contains(int,int)](https://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html#contains%)可以制作非矩形组件28int,%20int%29)。是否更好的选择取决于您的需求(您不需要在第一种情况下重新绘制整个面板 - 只需使用指定边界的repaint()变体,并使面板足够智能以优化局部绘制) 。 – kiheru

+1

@mlm我个人会采用第一种方法。我只是想进一步。想象一下有1000x1000的网格。那将是100万个组件。如果你只是想改变它们的颜色而没有别的东西,我不认为有这么多物体的需要。 (在第二种方法中)看起来你打算拥有如此多的对象,只是为了利用鼠标输入的行为(除此之外,你不需要它们是组件)。采用第一种方法时,您不需要维护太多的对象(圆圈),基本上只需重新绘制需要重新绘制的区域。 (这正是你想要的)。 – user3437460

+0

它可能有助于[配置文件](http://stackoverflow.com/q/2064427/230513)这两种方法。 – trashgod

回答

2

如果是这样,我该如何设置一个圆形容器?

结帐Playing With Shapes。您可以使用ShapeComponent创建一个与组件类似的圆圈。因此,您可以像构建其他Swing组件一样构建网格。