我想做一些类似于图表编辑器的东西 - 一个允许用户在画布上创建,查看和编辑一堆形状的应用程序。我的GUI基本上有三个部分 - 标准的JMenuBar,右侧的一个JPanel用于显示有关形状的信息,旁边有一个JPanel,用于可视化形状。
除此之外,我有一个定义形状的包。为简单起见,说只有一个Square,包含以下信息:画布上的坐标,大小,用户定义的名称和描述,颜色。 项目的主要类(JFrame的扩展)包含Squares列表。
现在,我可以通过简单地使用drawrect和whatnot在JPanel中绘制它们来形象化,但我想创建一个交互式编辑器 - 如果用户右键单击可视化形状,将弹出一个上下文菜单他移动它,改变它的属性或完全去除形状。单击JPanel中的空白点将允许用户(再次通过菜单)创建新形状。
是否有自动执行此操作的方法,而不是手动保持矩阵将画布的每个像素映射到某个形状并在右键单击时进行检查?例如,我可以说,在JPanel中绘制这个并做一些onclick ...... 一个相关的问题,当我在JPanel中编辑形状时,如何访问主应用程序类中的Square / Circle列表,这样我才能真正改变它?我想这很简单,但现在我不知道怎么做。
请指出我正确的方向,任何将被欣赏,提示,示例,相关教程的链接......
答案 0 :(得分:3)
正如@eugener所建议的,实现Shape
接口的类具有contains()
方法,对此有用。 GraphPanel
是一个示例,说明了您提到的几个功能。
答案 1 :(得分:2)
实现此目的的最常见方法是允许形状确定点是否在形状内。希望您的代码是面向对象的,每种类型的形状都是一个类。
您所要做的就是为每个形状定义boolean isInside( point: Point)
等方法。一旦你拥有了所有你需要做的就是以反向z顺序(从上到下)走向形状,并查看鼠标点击点所在的位置。如果它没有任何形状 - 你点击了画布。获得此信息后,您可以显示相应的菜单。
希望这有帮助