【问题标题】:Eclipse Draw2d. Changing z order for IFigureEclipse Draw2d。更改 IFigure 的 z 顺序
【发布时间】:2012-02-24 10:42:51
【问题描述】:

我正在研究“Eclipse 图形框架 (GEF)”一书中的示例,其中包含的家谱示例(Draw2d 章节)似乎将数字的 z 顺序弄乱了。当一个图形被拖动或选择时,它的 z 顺序保持不变,这会导致奇怪/不自然的行为,被拖动的图形可以被拖到其他图形下面。

我希望能够在选择数字时更改数字的 z 顺序,以便将它们移动到子列表的顶部并显示在图表 z 维度的顶部。最好的方法是什么?

【问题讨论】:

    标签: java swt eclipse-gef draw2d


    【解决方案1】:

    draw2d 中图形的 z 顺序可以通过添加顺序(最后一个图形在顶部)定义,也可以在 Figure.add 中设置。

    我想最简单(但可能不是很有效)的方法是从父级中删除图形并再次添加它。这将使它成为添加的最后一个数字,因此也是顶部的数字

    【讨论】:

    • 有趣。我昨天尝试调试 GEF,试图了解为什么会发生这种情况,但无法理解。我找到了另一种方法,即在EditPart 上安装一个新的ResizableEditPolicy,覆盖showSelection 方法并在父EditPart 上调用reorderChild,但在这种情况下,它会调整大小反馈,而拖动被破坏....哦,好吧。如果我发现了什么,我会再次发布。
    【解决方案2】:

    我发现删除图形并添加回来会搞砸事件系统,例如,如果您的意图是,当图形被拖到另一个位置时,您想将该图形带到前面,则拖动被中断,您将不再获得该图形的任何事件。要将图形置于顶部,请使用以下代码:

    final IFigure child = <figure you want to bring to the front>;
    final IFigure parent = child.getParent();
    final List children = child.getParent().getChildren();
    children.remove( child );
    children.add( child );
    child.repaint();
    

    这是操纵原始子级列表,将特定子级移动到 z 顺序的前面。然后,重新绘制孩子以显示此更改。此方案是 Draw2d 特有的,与 GEF 无关。

    【讨论】:

      猜你喜欢
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2023-03-22
      • 2020-10-07
      相关资源
      最近更新 更多