我正在尝试使用 swing 制作一个绘画程序。我有几种用户可以绘制的形状,包括椭圆形、直线和矩形。可以使用各种笔划(线条粗细)绘制形状(使用graphics2d),并且可以填充或不填充。
我正在尝试实现一项功能,以便用户可以用鼠标右键单击形状并拖动它来移动它。
我当前的策略是以相反顺序轮询形状数组(这意味着如果有多个形状,则选择最近添加的一个)。
每个形状实现都有一个名为 isSelected(int x, int y)
的方法。我需要弄清楚如何确定一个点是否落在形状上。一项挑战是,在内部单击时不应选择未填充的形状(例如椭圆形),但如果已填充,则应选择该形状。此外,选择应响应笔画的粗细。也就是说,如果一条线使用较粗的笔画,则应该可以通过单击外部区域来选择该线,而不仅仅是该线的中心。
我到底该如何实现这个?
最佳答案
I am storing an array of a custom type which implements a 2d shape from this API
然后你可以使用:
-
Shape#contains(double, double)
-
Shape#contains(double, double, double, double)
-
Shape#contains(Point2D)
-
Shape#contains(Rectangle2D)
取决于您拥有的信息以及您想要检查的内容
关于java - Swing 绘制程序 - 如何处理选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47106533/