【问题标题】:How to create two figures on a single Drag and drop in GEF?如何在 GEF 中的一次拖放中创建两个图形?
【发布时间】:2012-08-23 20:59:13
【问题描述】:

我喜欢在调色板的一次拖放中创建两个图形,即在一次拖放中应该创建两个图形,它们都具有单独的 EditPart 和 Model 类。

提前致谢

【问题讨论】:

    标签: eclipse-gef


    【解决方案1】:

    有多种方法可以做到这一点:最简单的方法是让你从 creationFactory 返回 数组或对象列表。那么,在你里面

    protected Command getCreateCommand(final CreateRequest request) {
       if (request.getNewObject() instanceof List<?>/Object[]) {
         ...
       }
    }
    

    或者,另一种方法是将 CreationTool 子类化为具有创建工厂的列表。然后,创建一个自定义请求类型,例如,

    public class MultiCreateRequest extends Request {
        ...    
    }
    

    并覆盖它将处理这种情况的 getCommand(Request request) 调度方法:

    public Command getCommand(Request request) {
       if (REQ_MULTI_CREATE.equals(request.getType()))
          return getMultiCreateCommand((MultiCreateRequest) request);
    }
    

    子类化创建工具时应注意:

    Constructor
    createTargetRequest() (return MultiCreateRequest)
    getCommandName() (return REQ_MULTI_CREATE)
    getCreateRequest() (specify)
    selectAddedObject(EditPartViewer viewer) (to select all created that way objects)
    updateTargetRequest() (specify)
    

    哦,我实际上想出了这个想法,创建新工具子类化 TargetingTool 比子类化 CreationTool 更好。相反,您可以复制实现(实际上很容易)并根据需要进行更改。

    【讨论】:

    • 感谢您的回答!正如您所说的第一种方法创建了对象数组并获得了 2 个请求对象,因为数组还创建了 2 个命令对象。但我怎样才能返回 2 个对象。我尝试使用复合命令,但它没有在编辑器上绘制任何东西。请帮助我提前感谢
    • 是的,然后您应该创建 CompoundCommand。如果它不起作用,请尝试分别准确地跟踪/调试每个命令的执行,看看为什么它现在起作用了。
    • 调试控制根本没有进入从抽象类 CompoundCommand 实现的执行方法。
    • 我现在无法检查,但 AFAIK CompoundCommand 不是 AbstractClass,它是您可以应用常规命令的东西。很像: CompoundCommand cc = new CompoundCommand(); cc.apply(cmd1); cc.apply(cmd2);
    • 感谢时间。是的,正如您所说,CompoundCommand 不是 AbstractClass,我让它工作了。但是在画布上移动图表时,它说 classCastexception 无法从工具栏布局转换为 xylayout。
    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多