gef中拖动拽动原理以及实现(一)

gef中拖动拽动原理以及实现

 

 

方案一:

创建拖拽对象的工厂

package com.easyway.plugin.gef.diagram.dev.model;

import org.eclipse.gef.requests.CreationFactory;

/**

 * 创建对象工厂

 * @author longgangbai

 *

 */

publicclass ElementFactory implements CreationFactory {

       private Object template;

       public ElementFactory(Object template) {

          this.template = template;

       }

       /**

        * 创建对象

        * @see org.eclipse.gef.requests.CreationFactory#getNewObject()

        */

       @Override

       public Object getNewObject() {

          try {

             return ((Class) template).newInstance();

          }

          catch (Exception e) {

             returnnull;

          }

       }

       /**

        *  创建对象工厂

        * @see org.eclipse.gef.requests.CreationFactory#getObjectType()

        */

       @Override

       public Object getObjectType() {

          returntemplate;

       }

    }

创建一个相关的拖动的类:用于实现拖动的功能。

package com.easyway.plugin.gef.diagram.dev.dnd;

import org.eclipse.gef.EditPartViewer;

import org.eclipse.gef.dnd.TemplateTransferDropTargetListener;

import org.eclipse.gef.requests.CreationFactory;

import com.easyway.plugin.gef.diagram.dev.model.ElementFactory;

/**

 * 设置相关的拖动转换模板为监听器

 * @author longgangbai

 *

 */

publicclass DiagramTemplateTransferDropTargetListener extends TemplateTransferDropTargetListener {

 

   /**

    *

    * @param viewer

    */

   public DiagramTemplateTransferDropTargetListener(EditPartViewer viewer) {

      super(viewer);

   }

   //------------------------------------------------------------------------

   // Abstract methods from TemplateTransferDropTargetListener

  /**

   * 注入相关的工厂的信息

   */

   protected CreationFactory getFactory(Object template) {

      returnnew ElementFactory(template);

   }

}

使用如下:

在相关的GraphicalEditorWithPalette类中使用代码如下:

   //------------------------------------------

   // Abstract methods from GraphicalEditor

   protectedvoid initializeGraphicalViewer() {

      // this uses the PartFactory set in configureGraphicalViewer

      // to create an EditPart for the diagram and sets it as the

      // content for the viewer

      getGraphicalViewer().setContents(this.diagram);     

      getGraphicalViewer().addDropTargetListener(new DiagramTemplateTransferDropTargetListener(getGraphicalViewer()));

   }

   // Overridden methods from GraphicalEditorWithPalette

   protectedvoid initializePaletteViewer() {

      super.initializePaletteViewer();

      getPaletteViewer().addDragSourceListener(

         new TemplateTransferDragSourceListener(getPaletteViewer()));

   }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值