【问题标题】:How are child figures made selectable in GEF?如何在 GEF 中选择子图形?
【发布时间】:2014-08-26 14:04:27
【问题描述】:

我使用 Logic 示例作为参考,将端口作为子项添加到矩形 Figure/EditPart/Model。端口 Figures 显示如预期,调试显示 EditParts 和 Models 已创建并添加到父级,但子级不可选择。

在子项的 EditPart 中,我重写 isSelectable() 以返回 true。

在父级中,我尝试重写 createChildEditPolicy() 以返回 NonResizableEditPolicy,方法是颠倒使子级不可选择here 的建议,但它似乎什么也没做。如果我在孩子的 EditPart 中将 NonResizableEditPolicy 作为 SELECTION_FEEDBACK_ROLE 安装,则最初在创建时选择它,但以后无法选择。

此外,当单击子图形时,父图形也不会被选中 - 这是一个死点,单击不会更改选择。

我是否遗漏了一些使它可以选择的东西,还是可能有其他东西在干扰?

【问题讨论】:

    标签: java eclipse-rcp eclipse-gef


    【解决方案1】:

    您可以尝试使用调试器为查看器设置断点 getEditPartAt(Point) 并从那里逐步执行。这应该在您单击孩子时触发。

    可能只是没有创建任何选择反馈,因此您也可以尝试输出 viewer.getSelectedEditParts() 以检查实际存在的选择,但缺少反馈。

    【讨论】:

    • 我假设您的意思是 getObjectAt(Point) - 它返回一个 EditPart。它不会被触发,getSelectedEditParts() 也不会被触发。选择工具设置为仅选择一个对象,当我单击子对象时,无论先前的选择是什么,都保持选中状态,没有其他任何内容添加到选择中。
    • 好的,您是否在该子 EditPart 类中重写了 getDragTracker() 函数?如果没有,请检查超类是否正在执行此操作,或者覆盖它以提供基本的 DragTracker。如果那返回 null 这可能是原因。如果 DragTracker 在那里,您可以从 DragTrackers mouseDown-function 中检查发生了什么。
    • Eclipse 制作了几个样板方法(//TODO 自动生成的方法存根),包括 getDragTracker()。一旦我删除了这些,它现在就可以工作了。感谢 Hotzilla 的解决方案。很遗憾,我没有创建帐户,因此无法登录以接受您的回答。
    • @Chris,我合并了你的帐户,所以你现在应该可以接受这个答案了。
    【解决方案2】:

    我遇到了同样的问题,并解决了它:尝试在编辑部分安装合适的策略。

       @Override
       protected void createEditPolicies() {
           installEditPolicy(EditPolicy.LAYOUT_ROLE, yourEditPolicy());
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多