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的主要概念和技术,结合源码实践,可以帮助开发者快速掌握图形化编辑器的开发技术,并为后续的RCP应用开发打下坚实基础。无论你是希望...
"GEF_Tutorial.pdf"很可能是GEF的基础教程,涵盖了GEF的基本概念、架构和使用方法,包括图元的创建、连接线的绘制、交互操作的实现等。用户可以通过阅读这个教程来了解如何在Eclipse环境中搭建GEF项目,并进行基本的...
标题“GEF典型实现例子”指的是使用Graphical Editing Framework (GEF)的示例应用。GEF是Eclipse平台下的一个开源项目,主要用于构建图形化编辑工具,它提供了丰富的图形用户界面(GUI)组件和框架,帮助开发者创建...
在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...
通过这个项目,你将学习到如何创建一个新的GEF编辑器,包括定义模型,创建图元和编辑领域,实现绘图功能,以及添加用户交互。同时,它也是一个很好的实践平台,可以尝试修改源码,观察不同改动对图形界面的影响,...
4. **实现视图**:根据模型创建视图,包括图元的绘制和连接器的实现。 5. **控制器逻辑**:编写处理用户交互的控制器代码,例如响应点击、拖拽等事件。 6. **调试与运行**:在Eclipse内部运行和测试图形编辑器,进行...
在本实例中,我们将探讨如何利用GEF实现一个简单的MVC(Model-View-Controller)架构,这是一种常见的软件设计模式,用于分离应用程序的数据、显示逻辑和用户交互。 1. **GEF框架基础**: - **模型(Model)**:...
- **图元工厂**: 创建和管理不同类型的图元,简化图形元素的创建过程。 - **事件监听**: 监听用户操作,实现复杂的逻辑响应。 总结,GEF教程及DEMO源码的学习,不仅能帮助开发者理解图形编辑框架的设计思想,还能...
ADT是Google提供的一款Eclipse插件,用于帮助开发者在Eclipse环境中创建、调试和发布Android应用程序。GEF的引入主要是为了支持ADT中的图形化界面设计,使得开发者可以更直观地构建和修改Android应用的用户界面。 ...
本DEMO旨在指导开发者如何利用GEF来开发Eclipse插件,通过拖拽组件的方式构建图形编辑器,并将设计转化为可执行的Java代码。 首先,我们需要理解Eclipse插件开发的基础。Eclipse插件是基于OSGi(Open Service ...
标题“gef eclipse org”指的是在Eclipse集成开发环境中安装用于Android开发的GEF(图形化编辑框架)插件的过程。GEF(Graphical Editing Framework)是Eclipse平台的一部分,主要用于构建图形化的用户界面和应用程序...
"GEFApp"这个例子可能是通过创建一个简单的图形编辑场景来展示GEF的基本用法。比如,它可能包含一个画布,用户可以在上面绘制和编辑一些基本形状,如圆形、矩形,并能进行拖拽、缩放、旋转等操作。源码中会展示如何...
4. **图元工厂(GEF Metamodeling)**:图元工厂定义了图形元素的类型和它们之间的关系,是创建图形编辑器的核心部分。 5. **手势处理**:GEF支持多种手势,如拖放、单击、双击、拖拽等,用于用户交互和图形编辑。 ...
Eclipse的GEF(Graphical Editing Framework)插件是一个强大的图形编辑框架,它为开发者提供了在Eclipse集成开发环境中创建可视化的图形界面和编辑器的能力。这个插件主要用于构建复杂的图形用户界面,如UML模型、...
1. **图形化编辑**: GEF提供了一套完整的机制来创建可拖动、可选择、可修改的图形元素。 2. **撤销/重做**: 通过指挥者和命令模式,GEF支持对用户操作的撤销和重做。 3. **自定义绘图**: 开发者可以通过继承和扩展...
"hello.gef"很可能是这样一个实例化的插件项目,演示了如何利用GEF框架和XYLayout来创建一个可定制的图形编辑界面。 总结起来,"hello.gef"项目展示了如何利用GEF在Eclipse环境中开发图形编辑插件,并通过XYLayout...
6. **事件(Event)处理**:GEF通过监听和处理图形元素的事件,如鼠标点击、拖拽等,实现了图形界面的动态响应。 7. **图(Diagram)和图表(Graph)**:图表示整个编辑区域,而图表则是由一组相互连接的节点(Node...
通过以上步骤,我们可以在GEF框架下实现悬空连线的功能,让用户在图形编辑器中能够直观地创建和操作潜在的连接关系。这一过程涉及了软件设计模式、图形用户界面交互、以及Eclipse和GEF的特定技术。实现这样的功能...
《GEF-SDK-3.2.1:ECLIPSE与JSP开发中的图形编辑框架》 在软件开发领域,ECLIPSE作为一个强大的集成开发环境(IDE),被广泛用于Java应用程序,包括Web开发中的JSP(JavaServer Pages)项目。在ECLIPSE中配置Lomboz...
在Eclipse环境中,GEF提供了一组强大的服务和模型,使得创建可自定义的、交互式的图形编辑器变得相对容易。这些服务包括图元(graphical figures)、连接线(connectors)、布局管理器(layout managers)以及各种...