`
liugang594
  • 浏览: 993215 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

增加GEF的动态性

    博客分类:
  • GEF
阅读更多

在一个GEF应用中,最常的操作是移位和缩放。

移位和缩放实现本身很简单,绝大部分应用的最终结果是鼠标拖动操作一放下,所操作的图就直接变幻到最终状态,虽然结果是正确的。不过总是觉得缺少一些动感。

在GEF插件自带的示例中,有一个"org.eclipse.gef.example.flow"的例子,它做的就比较炫,能动慢动作的形式展示图形变换的一个动画过程。

思路其实是很简单的,就是分别记住初态和终态,然后按照一定的时间间隔和变换次数,每次累进一点,把这些累进过程显示出来,就能看到一个动态效果了。

我也试着把它的代码应用在其他的例子,结果挺好的,只是好像这些代码有点繁锁。

昨天在学习Zest的时候,无意发现了,原来Draw2D中其实已经自带了一些API用来实现这个目标。

它们分别是:

org.eclipse.draw2d.Animation
org.eclipse.draw2d.LayoutAnimator
 

其中org.eclipse.draw2d.LayoutAnimator是用来注册监听的,用来监听你所想要支持的图对象,例如,你想要A图的子图的变换过程能被显示,就让A增加一个org.eclipse.draw2d.LayoutAnimator作为LayoutListener。

org.eclipse.draw2d.Animation用来记录初始和终态的信息,并真正执行变换过程的。例如起来相当简单:

首先,假如A是一个container的Figure,你想要A中所以图的变换过程都显示,则给A增加以下内容:addLayoutListener(LayoutAnimator.getDefault());

然后,通常在EditPart里会有以下样子的代码来实现移动或缩放:

((AbstractGraphicalEditPart) getParent()).setLayoutConstraint(this,
getFigure(),
new Rectangle(model.getLocation(), model.getSize()));
 

此处只需要增加一点点东西,即完成所需要的目标:

Animation.markBegin();
((AbstractGraphicalEditPart) getParent()).setLayoutConstraint(this,
getFigure(),
new Rectangle(model.getLocation(), model.getSize()));
Animation.run(500);
 

OK了,简单吧。试一下效果,如果出来了,那估计挺炫的。

分享到:
评论

相关推荐

    GEF的动态变化二

    标题“GEF的动态变化二”暗示我们正在讨论的是Graph Editor Framework (GEF) 的一个特定方面,特别是关于它的动态性或变化。GEF是一个用于构建图形编辑器的开源Java框架,广泛应用于创建可视化的软件设计工具。在这...

    自己下的GEF资源打包

    "GEF教程.pdf"可能更加深入,除了基础内容外,可能会涉及到更高级的主题,如自定义手势识别、动态模型更新、图层管理等。对于想要深入理解和应用GEF的开发者来说,这将是一份宝贵的参考资料。 "gefpractice31.zip...

    GEF教程及demo源码GEF_RCP_DEMO.zip

    它允许EditPart根据当前上下文动态改变其行为,增加了系统的灵活性。 7. **RCP(Rich Client Platform)** Eclipse RCP是一个用于构建桌面应用程序的框架,它基于插件系统,可以方便地集成多种功能。在本教程中,...

    GEF Example Source Code

    - **连接线(Connectors)**:掌握如何绘制和管理图元之间的连接线,包括动态连接和自动布局。 - **模型-视图-控制器(MVC)**:理解GEF如何实现MVC设计模式,以及如何将数据模型与图形视图绑定。 - **事件处理**:...

    GEF Description

    - **逐步实现**:从简单的项目开始,逐渐增加复杂度,有助于深入理解 GEF 的各个方面。 总之,GEF 为开发者提供了构建高质量图形编辑器的强大工具和支持,通过合理利用 GEF 的各种组件和技术,开发者可以高效地开发...

    GEF 入门教程 中文版

    - GEF支持动态缩放,使得用户可以在不同的缩放级别下查看图形。 - 缩放可以通过菜单项或者键盘快捷键来触发。 **知识点2:键盘快捷键** - 键盘快捷键是提高用户效率的重要手段。 - GEF允许自定义键盘快捷键来执行...

    GEF-SDK-3.3.1.zip

    4. **事件处理**:GEF通过监听和响应用户输入事件来实现图形元素的动态交互,如拖放、选择、剪切、复制、粘贴等操作。 5. **数据绑定**:GEF支持模型和视图之间的数据绑定,确保了图形界面的实时更新。 6. **...

    gef-step3.zip_3gef_GEF eclipse_GEF-step2_gef_gef-st

    GEF提供了一种模型-视图-控制器(MVC)的设计模式,使得开发者可以分离图形表示与业务逻辑,提高代码的可维护性和可扩展性。 **3gef**可能是这个系列教程的一个特定版本或者阶段,强调了对GEF的三次迭代改进或深化...

    界面设计GEF应用实例

    每个例子都增加了新的功能,这种递增的学习方式使得学习过程更加清晰和易于理解。 首先,基础例子可能包括创建一个基本的画布,展示如何定义图形元素,如线条和形状,并且实现它们在画布上的绘制。接下来的例子可能...

    EMF_GEF_入门系列

    通过EMF,开发者可以定义一套抽象的数据模型,并将其转换为实际的编程语言实现,提高了代码的可读性和可维护性。 GEF则是用于构建图形编辑器的框架,它提供了丰富的图形绘制和交互功能。GEF支持基本的绘图操作,如...

    GEF 可用的6个demo

    12. **可扩展性与插件系统**:作为Eclipse的一部分,GEF支持插件扩展。DEMO可能展示如何创建和使用插件来扩展图形编辑器的功能。 通过深入研究这些DEMO,开发者可以掌握使用GEF构建图形化编辑器的基本技能,进一步...

    java开发工具插件 GEF

    GEF的灵活性和强大的功能使其成为Java开发中图形化应用程序的首选框架之一。在实际开发过程中,通常会结合其他Eclipse插件,如EMF( Eclipse Modeling Framework)用于生成模型类,以进一步提升开发效率。

    GEF Programmer's Guide 中文版

    它们使用EditPolicy来协助处理大部分编辑任务,EditPolicy可以看作是EditPart的策略模式实现,根据需要动态插入或移除。 8. **Viewers**: EditPartViewer是显示视图的容器,它可以使用GraphicalViewer展示图形...

    gef 搜索文档绝对有用

    gef是开源社区的一个项目,其设计目标是简化GDB的使用,增加可扩展性,并提供更多的可视化工具。gef的核心特性包括: - **命令扩展**:gef提供了一系列自定义命令,如`context`、`disassemble`、`shell`等,这些...

    eclipse 3.3 emf 2.20 gef 3.2 ve 1.2

    在GEF 3.2中,可能包含了更多预定义的图元,更好的交互设计,以及对动态图形更新的支持,使得开发者能够更容易地构建出功能丰富的可视化编辑器。 VE(Visual Editor)是Eclipse中的另一个重要组件,版本1.2主要关注...

    GEF-ALL-3.7.2

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

    GEF-runtime-3.1

    8. **连接线(Connectors)和节点(Nodes)**:GEF支持节点和连接线的动态创建和修改,允许创建复杂的图形网络结构。 9. **布局管理器(Layout Manager)**:用于自动或半自动调整图形元素的位置和大小,保持界面的...

    gef的源代码,能可运行

    6. **动态插件加载**:gef允许用户在运行时加载和卸载插件,这为自定义扩展提供了极大的灵活性。 ### gef的安装与使用 安装gef通常需要先确保系统已经安装了GDB。接着,可以使用以下步骤来安装gef: 1. 下载gef的...

    GEF例程,很棒的

    GEF的主要目标是降低图形界面开发的复杂性,让开发者可以专注于业务逻辑,而不是底层图形绘制的细节。 **GEF的核心组件与架构** 1. **Director**:这是GEF的核心,负责协调和管理所有的部件,包括模型、视图和控制...

Global site tag (gtag.js) - Google Analytics