【问题标题】:Java Swing/AWT - painting objects with context menusJava Swing/AWT - 使用上下文菜单绘制对象
【发布时间】:2012-04-30 00:55:41
【问题描述】:

我想做一个类似于图表编辑器的东西——一个允许用户在画布上创建、查看和编辑一堆形状的应用程序。我的 GUI 基本上包含三个部分 - 一个标准的 JMenuBar,一个在右侧用于显示形状信息的 JPanel,以及一个用于显示形状的 JPanel。

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

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

有没有一种自动化的方法来做到这一点,而不是手动保持一个矩阵将画布的每个像素映射到某个形状并在右键单击时检查它?一个我可以说的地方,例如,在 JPanel 中绘制这个并在点击时做一些事情...... 一个相关的问题,当我在 JPanel 中编辑形状时,如何访问主应用程序类中的 Square/Circle 列表,这样我才能真正改变它?我想这很简单,但现在我不知道该怎么做。

请指点我正确的方向,任何东西都会受到赞赏,提示,示例,相关教程的链接......

【问题讨论】:

    标签: java swing drawing contextmenu awt


    【解决方案1】:

    正如@eugener 所建议的,实现Shape 接口的类有一个对此有用的contains() 方法。 GraphPanel 是一个示例,说明了您提到的几个功能。

    【讨论】:

      【解决方案2】:

      实现这一点的最常见方法是允许形状确定点是否在形状内。希望您的代码是面向对象的,并且您的每种形状都是一个类。

      您所要做的就是为每个形状定义一个方法,例如boolean isInside( point: Point)。一旦你有了这些,你所要做的就是以反向 z 顺序(从上到下)遍历形状,然后查看鼠标点击点的位置。如果它不借给任何形状 - 您单击了画布。获得此信息后,您可以显示相应的菜单。

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-21
        • 1970-01-01
        • 1970-01-01
        • 2013-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多