随笔分类 - GEF

eclipse.org/gef
摘要: 利用org.eclipse.draw2d.SWTGraphics类和org.eclipse.swt.graphics.ImageLoader类可以实现把画布导出到图片文件的功能,原理是在内存里创建一个空白的Image,然后把Diagram画到它上面,最后保存到指定文件和格式。阅读全文
posted @ 2007-08-01 00:01 八进制 阅读(9847) | 评论 (59) 编辑
摘要: GEF已经为我们提供了很多种类的Request,如CreateRequest、CreateConnectionRequest和SelectionRequest等等。实现一个典型的图形化应用程序,例如UML类图编辑器,这些预定义的Request基本够用了。然而很多需求不太符合约定俗成的使用习惯,因此实现起来更多依赖开发人员的编码,而不是开发框架带来的便利。在这种情况下,我们也许要借助自定义Request来实现。阅读全文
posted @ 2007-06-21 23:35 八进制 阅读(12717) | 评论 (79) 编辑
摘要: 要准确的计算文字在画布上占据的空间,可以利用org.eclipse.swt.graphics.GC的stringExtent()方法阅读全文
posted @ 2007-04-14 01:03 八进制 阅读(5869) | 评论 (25) 编辑
摘要: 就像在swt里我们使用layout来控制各个控件的摆放位置一样,在Draw2D里最好也把这个工作交给LayoutManager来做。除非是在自己实现的Layout里,一般程序里自己不要轻易使用setBounds()、setLocation()和setSize()这些方法控制图形的位置和大小,而应该在为每个图形设置了适当的LayoutManager后,通过setConstraint()和setPreferredSize()等方法告诉layoutmanager如何布局。阅读全文
posted @ 2006-09-05 21:36 八进制 阅读(8623) | 评论 (31) 编辑
摘要: 在GEF应用程序里打开对话框阅读全文
posted @ 2006-07-07 23:13 八进制 阅读(6950) | 评论 (21) 编辑
摘要: 利用DirectedGraphLayout实现自动布局阅读全文
posted @ 2006-07-02 17:56 八进制 阅读(8274) | 评论 (28) 编辑
摘要: 使用非矩形图形节点,并通过覆盖LayoutEditPolicy的createChildEditPolicy()方法实现相应的选择框和控制柄。阅读全文
posted @ 2006-06-26 23:15 八进制 阅读(6666) | 评论 (53) 编辑
摘要: 通过添加Bendpoint实现自身连接(Self Connection)阅读全文
posted @ 2006-06-22 11:05 八进制 阅读(5512) | 评论 (16) 编辑
摘要: 从直线连接转换到可以任意增减转折点的折线连接的过程阅读全文
posted @ 2006-06-22 00:47 八进制 阅读(6537) | 评论 (19) 编辑
摘要: 通过添加Layer为图形编辑器设置背景图片阅读全文
posted @ 2006-06-21 17:04 八进制 阅读(8170) | 评论 (23) 编辑
摘要: Draw2D里的Label不支持自动换行,虽然可以插入换行符手动换行。用TextFlow和适当的Layout可以实现文字的自动换行。阅读全文
posted @ 2006-03-23 11:08 八进制 阅读(5919) | 评论 (33) 编辑
摘要: 最近有朋友问使用EMF作为GEF模型时,如何在选中editpart时在属性页里显示属性的问题。这里提供一个解决方法,不过并不完美。阅读全文
posted @ 2005-10-24 21:34 八进制 阅读(7333) | 评论 (36) 编辑
摘要: 其实可以放在任何Composite上,当然也就可以放在视图里了。关键任务是创建GraphicalViewer、RootEditPart、EditDomain和EditPartFactory这些对象,下面的代码是我从别处拷来的,稍微修改了一下。阅读全文
posted @ 2005-10-21 20:26 八进制 阅读(7675) | 评论 (33) 编辑
摘要: 两天前GEF发布了3.1M7版本,但使用下来发现和M6没有什么区别,是不是主要为了和Eclipse版本相配套?希望3.1正式版早日发布,应该会新增不少内容。上一篇帖子介绍了如何实现表格功能,在开发过程中,另一个经常用到的功能就是树,虽然SWT提供了标准的树控件,但使用它完成如组织结构图这样的应用还是不够直观和方便。在目前版本(3.1M7)的GEF中虽然没有直接支持树的实现,但Draw2D提供的例子程序里却有我们可以利用的代码(org.eclipse.draw2d.examples.tree.TreeExample,运行界面见下图),通过它可以节约不少工作量。阅读全文
posted @ 2005-05-27 00:09 八进制 阅读(12544) | 评论 (79) 编辑
摘要: 在目前的GEF版本(3.1M6)里,可用的LayoutManager还不是很多,在新闻组里经常会看到要求增加更多布局的帖子,有人也提供了自己的实现,例如这个GridLayout,相当于SWT中GridLayout的Draw2D实现,等等。虽然可以肯定GEF的未来版本里会增加更多的布局供开发者使用(可能需要很长时间),然而目前要用GEF实现表格的操作还没有很直接的办法,这里说说我的做法,仅供参考。阅读全文
posted @ 2005-05-20 10:14 八进制 阅读(13771) | 评论 (60) 编辑
摘要: 当一个GEF应用程序实现了大部分必需的业务功能后,为了能让用户使用得更方便,我们应该在易用性方面做些考虑。从3.0版本开始,GEF增加了更多这方面的新特性,开发人员很容易利用它们来改善自己的应用程序界面。这篇帖子将介绍主要的几个功能,它们有些在GEF 2.1中就出现了,但因为都是关于易用性的而且以前没有提到,所以放在这里一起来说。(下载示例代码)阅读全文
posted @ 2005-04-21 11:21 八进制 阅读(16604) | 评论 (112) 编辑
摘要: GEF的设计没有对模型部分做任何限制,也就是说,我们可以任意构造自己的模型,唯一须要保证的就是模型具有某种消息机制,以便在发生变化时能够通知GEF(通过EditPart)。在以前的几个例子里,我们都是利用java.beans包中的PropertyChangeSupport和PropertyChangeListener来实现消息机制的,这里将介绍一下如何让GEF利用EMF构造的模型(下载例子,可编辑.emfsubject文件,请对比之前功能相同的非EMF例子),假设你对EMF是什么已经有所了解。阅读全文
posted @ 2005-04-15 18:13 八进制 阅读(16425) | 评论 (43) 编辑
摘要: 前面的帖子里曾说过如何使用布局,当时主要集中在ToolbarLayout和FlowLayout(统称OrderedLayout),还有很多应用程序使用的是可以自由拖动子图形的布局,在GEF里称为XYLayout,而且这样的应用多半会需要在图形之间建立一些连接线,比如下图所示的情景。连接的出现在一定程度上增加了模型的复杂度,连接线的刷新也是GEF关注的一个问题,这里就主要讨论这类应用的实现,并将特别讨论一下展开/折叠(expand/collapse)功能的实现。请点这里下载本篇示例代码。阅读全文
posted @ 2005-04-11 15:16 八进制 阅读(12937) | 评论 (59) 编辑
摘要: 我发现一旦稍稍体会到GEF的妙处,就会很自然的被它吸引住。不仅是因为用它做出的图形界面好看,更重要的是,UI中最复杂和细微的问题,在GEF的设计中无不被周到的考虑并以适当的模式解决,当你了解了这些,完全可以把这些解决方法加以转换,用来解决其他领域的设计问题。去年黄老大在一个GEF项目结束后,仍然没有放弃对它的继续研究,现在甚至利用业余时间开发了基于GEF的SWT/JFace增强软件包,Eclipse和GEF的魅力可见一斑。我相信在未来的两年里,由于RCP/GEF等技术的成熟,Java Standalone应用程序必将有所发展,在B/S模式难以实现的那部分领域里扮演重要的角色。阅读全文
posted @ 2005-03-30 17:25 八进制 阅读(21489) | 评论 (84) 编辑
摘要: 虽然很多GEF应用程序里都会用到连接(Connection),但也有一些应用是不需要用连接来表达关系的,我们目前正在做的这个项目就是这样一个例子。在这类应用中,模型对象间的关系主要通过图形的包含来表达,所以大多是一对多关系。本文结合具体实例讲解了如何在GEF中使用ToolbarLayout以及自定义简单的布局管理器。阅读全文
posted @ 2005-03-24 00:23 八进制 阅读(14485) | 评论 (62) 编辑
摘要: 这篇帖子将继续上一篇内容,主要讨论如何实现DirectEdit、属性页和大纲视图,这些都是一个完整GEF应用程序需要提供的基本功能。写这篇帖子的时候,我对例子又做了一些修改,都是和这篇帖子所说的内容相关的,所以如果你以前下载过,会发现那时的代码与现在稍有不同(功能还是完全一样的)。阅读全文
posted @ 2005-03-15 12:31 八进制 阅读(19210) | 评论 (79) 编辑
摘要: 现在我们来看个例子,它的功能非常简单,用户可以在画布上增加节点(Node)和节点间的连接,可以直接编辑节点的名称以及改变节点的位置,用户可以撤消/重做任何操作,有一个树状的大纲视图和一个属性页。阅读全文
posted @ 2005-02-19 13:57 八进制 阅读(55072) | 评论 (280) 编辑
摘要: GEF的优势是提供了标准的MVC(Model-View-Control)结构,开发人员可以利用GEF来完成以上这些功能,而不需要自己重新设计。与其他一些MVC编辑框架相比,GEF的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架的局限(不过实际上还是很少有脱离Draw2D的实现)。阅读全文
posted @ 2005-02-13 15:21 八进制 阅读(28026) | 评论 (19) 编辑
摘要: 鸡年第一天,首先向大家拜个年,恭祝新春快乐,万事如意。一年之计在于春,你对新的一年有什么安排呢?好的,下面还是进入正题吧。 关于Java2D相信大家都不会陌生,它是基于AWT/Swing的二维图形处理包, JDK附带的示例程序向我们展示了Java2D十分强大的图形处理能力。在Draw2D出现以前,SWT应用程序在这方面一直处于下风,而Draw2D这个SWT世界里的Java2D改变了这种形势。阅读全文
posted @ 2005-02-09 21:49 八进制 阅读(34134) | 评论 (52) 编辑
摘要: 由于工作的需要,最近开始研究GEF(Graphical Edit Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。其实一年多来我们做的项目都是和它有关的,只是之前我具体负责的事情和它没什么关系。那时也看过黄老大写的代码,EMF和GEF混在一起特别晕,没能坚持看下去。这次自己要动手做了,正好趁此机会把它搞明白,感觉GEF做出来的东西给人很专业的感觉,功能也很强大,应该挺有前途的。此外,GEF里用到了很多经典模式,最突出的如大量应用Command模式,方便的实现Undo/Redo功能等等,通过学习GEF,等于演练了这些模式,比只是看看书写几个类那种学习方式的效果好很多。阅读全文
posted @ 2005-02-05 17:17 八进制 阅读(46821) | 评论 (80) 编辑