确定Line2D

时间:2016-01-11 13:57:45

标签: java swing line overlap jcomponent

没有。 Line2D周围和上面的组件。我想找到重叠的组件。我尝试了line.getbounds()。intersects(component)但它给出了我不需要的矩形区域组件。而且,距离有时会给我一个非常接近Line但不在线的组件。任何解决方案?

2 个答案:

答案 0 :(得分:1)

简短回答:检查这两个条件中是否至少有一个是真的

  • 该行的任何端点都在组件内部,使用方法contains
  • 该线与组件边界的任何一侧相交,使用交叉方法。

详细说明: 这些是可能的情况:

  • 该行的一个端点位于组件内部(这包括该行完全位于组件内部的情况);
  • 线穿过组件,但线的所有端点都在对象之外;在这种情况下,它将与两侧相交,但只有一条足以验证。
  • 在所有其他情况下,线和组件彼此不重叠,我们不在乎。

只有中间的子弹有点棘手,但是因为你只测试jcomponent,所以生命很简单,因为它们是与轴对齐的矩形。您可以轻松计算组件边界的端点。边界由宽度w和高度h的点(x,y)给出。这给你四个方面:

  • (x,y) - (x + w,y)
  • (x,y) - (x,y + h)
  • (x,y + h) - (x,y + h)
  • (x + w,y) - (x + w,y + h)

答案 1 :(得分:0)

如果您正在谈论的组件是java组件,那么它们是矩形的,您可以使用line.intersects(component.getBounds())

如果它们是任何其他形状,则必须定义该形状,并且如果它们不是矩形,则以数学方式使用该线