Search code examples
javagraphicsgraphics2d

Hit test on Graphics2D object?


I have a few Graphics2D objects (Line2D, Rectangle2D, Ellipse2D, Rectangle2D) and a GeneralPath. I know that if I want to hit test on them I could use the .contains(Point) method, but I need to hit test on these objects when they are not filled in. So I just want to test if the user clicked on their border/line. I don't need to worry about the thickness of the border for now. Let's say that I just need to worry if the user clicked within 10 pixels from the border/line.

I do have a MouseListener where I can get the coordinates of the mouse click, and my Graphics2D objects are stored on a data structure that I iterate over. I just don't know how to hit test on the lines/borders.

Any suggestions will be appreciated!


Solution

  • I've never had cause to use it, but it looks like your best bet is the Graphics2D.hit() method here.

    Just use a 1px*1px rectangle at the mouse position, and set the onStroke parameter to true, and make sure that the Clip, Transform, and Stroke properties are set up correctly (as mentioned in the javadoc) before you do the call.