2012-04-28 68 views
2

我想制作类似于图编辑器的应用程序 - 允许用户在画布上创建,查看和编辑一组形状的应用程序。我的GUI基本上有三个部分 - 标准的JMenuBar,右侧的一个JPanel,用于显示有关形状的信息以及应该用于形状可视化的JPanel。Java Swing/AWT - 使用上下文菜单绘制对象

除此之外,我有一个定义形状的包。为了简单起见,只有一个Square,包含以下信息:画布上的坐标,大小,用户定义的名称和描述,颜色。 项目的主要类(JFrame的扩展)包含正方形列表。

现在,我可以通过使用drawrect和whatnot在JPanel中简单地绘制图形来形象化这些图形,但是我想创建一个交互式编辑器 - 如果用户右键单击可视形状,会弹出一个上下文菜单允许他移动它,改变它的属性或完全删除它的形状。单击JPanel中的空白区域将允许用户(再次通过菜单)创建新形状。

是否有自动的方式来做到这一点,而不是手动保持矩阵映射画布的每个像素为特定的形状,并在右击时检查它?例如,我可以在JPanel中画一个这样的东西,然后点击... 一个相关的问题,当我在JPanel中编辑形状时,如何访问主应用程序类中的Square/Circle列表,这样我才能真正改变它?我想这很简单,但现在我不知道我该怎么做。

请点我在正确的方向,什么都可以理解,技巧,示例,链接到相关教程...

回答

2

达到这一目的的最常用的方法是允许的形状,以确定是否点内形状。希望你的代码是面向对象的,并且你的形状的每种类型都是一个类。

您所要做的就是为每个形状定义一个方法,如boolean isInside(point: Point)。一旦你拥有了所有你需要做的就是以反向的z顺序(从上到下)来走形状,并且看看鼠标点击的地方在哪里。如果它不借助任何形状 - 您点击画布。一旦你有这个信息,你可以显示一个合适的菜单。

希望这有助于

3

正如@eugener建议,实现了Shape接口的类有方法是对这项有益的。 GraphPanel是一个例子,说明你提到的几个功能。