对Graphics2D对象进行测试?

时间:2012-02-09 17:08:58

标签: java graphics graphics2d

我有一些Graphics2D对象(Line2D,Rectangle2D,Ellipse2D,Rectangle2D)和一个GeneralPath。我知道如果我想对它们进行测试,我可以使用.contains(Point)方法,但是当我们没有填写时,我需要对这些对象进行测试。所以我只想测试用户是否点击了他们的边缘。我现在不需要担心边框的厚度。假设用户在边界/线的10个像素内点击,我只需要担心。

我有一个MouseListener,我可以在其中获取鼠标单击的坐标,我的Graphics2D对象存储在我迭代的数据结构上。我只是不知道如何在线/边界上进行测试。

任何建议都将不胜感激!

2 个答案:

答案 0 :(得分:2)

我从来没有理由使用它,但看起来你最好的选择是Graphics2D.hit()方法here

只需在鼠标位置使用1px * 1px矩形,并将onStroke参数设置为true,并确保在执行之前正确设置了Clip,Transform和Stroke属性(如javadoc中所述)调用

答案 1 :(得分:1)

这就是我要做的事情:

Ellipse2D案例: 每次想要查看鼠标是否触摸到Ellipse2D的边缘时,都要创建一个略大于原始椭圆的Ellipse2D,以及稍微小一点的Ellipse2D。如果您的鼠标点击位于较大的Ellipse2D内,但在较小的Ellipse2D之外,则您点击“关闭”原始形状的边缘。

Rectangle2D案例: 以与Ellipse2D相同的方式解决这个问题 - 将一个更大,一个更小,并确定您的鼠标是在较大的鼠标内还是在较小的一个之外。

Line2D案例: 创建一个Rectangle2D,将Line2D包围某个预定的宽度。然后看看你的鼠标是否在Rectangle2D内。