【问题标题】:How to get circles to change colour with mouse over如何让圆圈在鼠标悬停时改变颜色
【发布时间】:2015-11-06 18:40:55
【问题描述】:

我想设置一个圆圈网格(不重叠),以便当鼠标指针悬停在其中一个上时,该圆圈会改变颜色。我已经尝试过,目前有两种选择:

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

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

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

【问题讨论】:

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

标签: java swing user-interface


【解决方案1】:

如果可以,如何设置圆形容器?

查看Playing With Shapes

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2014-09-27
    • 1970-01-01
    • 2019-01-16
    • 2016-03-20
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多