`

GEF中拖拽来创建图元的实现(GraphicalEditorWithFlyoutPalette版)

阅读更多

GraphicalEditor是来让用户快速开始GEF的Editor,它其实是一个包含了一个GraphicalViewer 的Editor。

        看API可以知道,GraphicalEditorWithFlyoutPalette和GraphicalEditorWithPalette都继承于GraphicalEditor,他们都包含了一个被分割的Composite,一部分是用来画图的GraphicalViewer,一部分是用来装画图工具的PaletteViewer,GraphicalViewer类就比较简单了,实现EditPartViewer接口,只额外添加了一个通过指定的Point来获取Handler的方法,Handler对于选择工具(SelectionTool)是很有用的,选择工具通过它来决定是否发动相应的事件消息,如果选择工具得到的Handler为空,则什么也不做,如果不为空,则选择工具可以通过Handler来跟踪用户鼠标拖动的轨迹。记住,选择工具只在用户第一次按住鼠标时才去获取Handler。而PaletteViewer继承于ScrollingGraphicalViewer(一个实现了本地滚动功能的GraphicalViewerImpl),是GEF调色板的Graphical viewer。

         顾名思义,GraphicalEditorWithFlyoutPalette与GraphicalEditorWithPalette最大的区别是GraphicalEditorWithFlyoutPalette的调色板(Palette)是弹出窗口形式的,可以隐藏。闲话少说,直接切入主题,看看在GraphicalEditorWithFlyoutPalette中怎么实现拖动调色板的工具来画图。

 

第一步:GraphicalEditorWithFlyoutPalette和GraphicalEditorWithPalette在这一步是一样的,就是在protected void initializeGraphicalViewer()方法(在初始化GraphicalViewer时会被调用)中给GraphicalViewer添加作为选择工具拖动目标的事件监听,因为从调色板拖到我这里我得知道啊,参考代码如下:

  getGraphicalViewer().addDropTargetListener(new TemplateTransferDropTargetListener(getGraphicalViewer())  {
            protected CreationFactory getFactory(Object template) {
                return new SimpleFactory((Class) template);
            }
        });

 

看到第一步,大家就自然会想到第二步,没错,第二步就是给调色板添加作为选择工具拖动源的事件监听

,这一步实现上GraphicalEditorWithFlyoutPalette和GraphicalEditorWithPalette是有区别的。

对于GraphicalEditorWithFlyoutPalette,我们要覆盖 protected PaletteViewerProvider createPaletteViewerProvider()方法,在那里面添加,参考代码如下:

 protected PaletteViewerProvider createPaletteViewerProvider() {
        return new PaletteViewerProvider(getEditDomain()) {
               protected void configurePaletteViewer(PaletteViewer viewer) {
                            super.configurePaletteViewer(viewer);
                            viewer.addDragSourceListener(new TemplateTransferDragSourceListener(viewer));
                }
       };
 }

 

对于GraphicalEditorWithPalette,我们只需要在其 protected void initializePaletteViewer()方法中添加即可,参考代码如下:

    protected void initializePaletteViewer() {
        getPaletteViewer().addDragSourceListener(
                new TemplateTransferDragSourceListener(getPaletteViewer()));
    }

 

第三步都相同,就是修改我们在 protected PaletteRoot getPaletteRoot() 中返回的自己写的PaletteRoot,把里面创建工具的CreationToolEntry改成CombinedTemplateCreationEntry(当然如果你用的就是CombinedTemplateCreationEntry,那就不用改),参考代码如下:

CombinedTemplateCreationEntry entry = new CombinedTemplateCreationEntry(
    "模型1", "创建模型1", EnteringModel.class,  new SimpleFactory(
      EnteringModel.class), s_descriptor, descriptor);
  
  baseWorkFlow.add(entry);

 

注意我加黑的部分EnteringModel.class,这个参数记得加(和后面的new SimpleFactory(
      EnteringModel.class)中的Class保持一致),不加也不会报错,网上是这么说的。。。

 

CombinedTemplateCreationEntry是继承自CreationToolEntry,其实它就是一个支持拖拽源(DragSource)的ToolEntry,里面有两个构造函数:

 public CombinedTemplateCreationEntry(String label, String shortDesc,
   Object template, CreationFactory factory,
   ImageDescriptor iconSmall, ImageDescriptor iconLarge) {
  super(label, shortDesc, factory, iconSmall, iconLarge);
  setTemplate(template);
 }

 和

 public CombinedTemplateCreationEntry(String label, String shortDesc,
   CreationFactory factory, ImageDescriptor iconSmall,
   ImageDescriptor iconLarge) {
  this(label, shortDesc, factory, factory, iconSmall, iconLarge);
 }

分享到:
评论

相关推荐

    GEF 入门版中文教程 源码

    总结来说,"GEF入门版中文教程 源码"是一个面向初学者的宝贵资源,它涵盖了GEF的主要概念和技术,结合源码实践,可以帮助开发者快速掌握图形化编辑器的开发技术,并为后续的RCP应用开发打下坚实基础。无论你是希望...

    自己下的GEF资源打包

    "GEF_Tutorial.pdf"很可能是GEF的基础教程,涵盖了GEF的基本概念、架构和使用方法,包括图元的创建、连接线的绘制、交互操作的实现等。用户可以通过阅读这个教程来了解如何在Eclipse环境中搭建GEF项目,并进行基本的...

    GEF典型实现例子

    标题“GEF典型实现例子”指的是使用Graphical Editing Framework (GEF)的示例应用。GEF是Eclipse平台下的一个开源项目,主要用于构建图形化编辑工具,它提供了丰富的图形用户界面(GUI)组件和框架,帮助开发者创建...

    GEF中文教程+代码

    在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...

    gef入门学习项目源码

    通过这个项目,你将学习到如何创建一个新的GEF编辑器,包括定义模型,创建图元和编辑领域,实现绘图功能,以及添加用户交互。同时,它也是一个很好的实践平台,可以尝试修改源码,观察不同改动对图形界面的影响,...

    GEF 3.10 eclipse 插件

    4. **实现视图**:根据模型创建视图,包括图元的绘制和连接器的实现。 5. **控制器逻辑**:编写处理用户交互的控制器代码,例如响应点击、拖拽等事件。 6. **调试与运行**:在Eclipse内部运行和测试图形编辑器,进行...

    java gef开发实例

    在本实例中,我们将探讨如何利用GEF实现一个简单的MVC(Model-View-Controller)架构,这是一种常见的软件设计模式,用于分离应用程序的数据、显示逻辑和用户交互。 1. **GEF框架基础**: - **模型(Model)**:...

    GEF教程及demo源码

    - **图元工厂**: 创建和管理不同类型的图元,简化图形元素的创建过程。 - **事件监听**: 监听用户操作,实现复杂的逻辑响应。 总结,GEF教程及DEMO源码的学习,不仅能帮助开发者理解图形编辑框架的设计思想,还能...

    GEF-SDK-3.6.2 jar

    ADT是Google提供的一款Eclipse插件,用于帮助开发者在Eclipse环境中创建、调试和发布Android应用程序。GEF的引入主要是为了支持ADT中的图形化界面设计,使得开发者可以更直观地构建和修改Android应用的用户界面。 ...

    eclipse gef demo

    本DEMO旨在指导开发者如何利用GEF来开发Eclipse插件,通过拖拽组件的方式构建图形编辑器,并将设计转化为可执行的Java代码。 首先,我们需要理解Eclipse插件开发的基础。Eclipse插件是基于OSGi(Open Service ...

    gef eclipse org

    标题“gef eclipse org”指的是在Eclipse集成开发环境中安装用于Android开发的GEF(图形化编辑框架)插件的过程。GEF(Graphical Editing Framework)是Eclipse平台的一部分,主要用于构建图形化的用户界面和应用程序...

    一个GEF绘图的简单例子

    "GEFApp"这个例子可能是通过创建一个简单的图形编辑场景来展示GEF的基本用法。比如,它可能包含一个画布,用户可以在上面绘制和编辑一些基本形状,如圆形、矩形,并能进行拖拽、缩放、旋转等操作。源码中会展示如何...

    GEF_User_Guide_中文翻译

    4. **图元工厂(GEF Metamodeling)**:图元工厂定义了图形元素的类型和它们之间的关系,是创建图形编辑器的核心部分。 5. **手势处理**:GEF支持多种手势,如拖放、单击、双击、拖拽等,用于用户交互和图形编辑。 ...

    Eclipse的GEF插件

    Eclipse的GEF(Graphical Editing Framework)插件是一个强大的图形编辑框架,它为开发者提供了在Eclipse集成开发环境中创建可视化的图形界面和编辑器的能力。这个插件主要用于构建复杂的图形用户界面,如UML模型、...

    GEF 3.6.2 API Doc

    1. **图形化编辑**: GEF提供了一套完整的机制来创建可拖动、可选择、可修改的图形元素。 2. **撤销/重做**: 通过指挥者和命令模式,GEF支持对用户操作的撤销和重做。 3. **自定义绘图**: 开发者可以通过继承和扩展...

    hello.gef_GEFeclipse_gef_trainq78_these5nn_

    "hello.gef"很可能是这样一个实例化的插件项目,演示了如何利用GEF框架和XYLayout来创建一个可定制的图形编辑界面。 总结起来,"hello.gef"项目展示了如何利用GEF在Eclipse环境中开发图形编辑插件,并通过XYLayout...

    GEF-ALL-3.7.2

    6. **事件(Event)处理**:GEF通过监听和处理图形元素的事件,如鼠标点击、拖拽等,实现了图形界面的动态响应。 7. **图(Diagram)和图表(Graph)**:图表示整个编辑区域,而图表则是由一组相互连接的节点(Node...

    悬空连线相关类的实现

    通过以上步骤,我们可以在GEF框架下实现悬空连线的功能,让用户在图形编辑器中能够直观地创建和操作潜在的连接关系。这一过程涉及了软件设计模式、图形用户界面交互、以及Eclipse和GEF的特定技术。实现这样的功能...

    GEF-SDK-3.2.1.rar

    《GEF-SDK-3.2.1:ECLIPSE与JSP开发中的图形编辑框架》 在软件开发领域,ECLIPSE作为一个强大的集成开发环境(IDE),被广泛用于Java应用程序,包括Web开发中的JSP(JavaServer Pages)项目。在ECLIPSE中配置Lomboz...

    GEF-SDK-3.2.1

    在Eclipse环境中,GEF提供了一组强大的服务和模型,使得创建可自定义的、交互式的图形编辑器变得相对容易。这些服务包括图元(graphical figures)、连接线(connectors)、布局管理器(layout managers)以及各种...

Global site tag (gtag.js) - Google Analytics