- 浏览: 539417 次
- 性别:
- 来自: 深圳
-
最新评论
-
gaolegao2008:
如果报 is_volum 列名找不到之类的,我是从新部署了一个 ...
spring quartz 定时器报错 -
gaolegao2008:
部署到linux上时,还有一种情况就是mysql数据库区分大小 ...
spring quartz 定时器报错 -
qq123zhz:
yahier 写道 对我有帮助,但我看的一个demo程序,却没 ...
spring quartz 定时器报错 -
qq123zhz:
这个要在eclipse的插件环境下运行的,你不懂eclipse ...
GEF 自动布局 -
qq123zhz:
这个很久了,不记得啥时候写的了
json转为Map
文章列表
GEF 验证模型
- 博客分类:
- eclipse插件/GEF
模型验证;X,Y,height,width是否为数字,如果不是数字,则在状态栏弹出红色的警告!
在Height 属性框中输入了 :50s后,在状态栏下显示红色的“Not a number”。
具体的实现代码:
代码在图片中
通过调用IPropertyDescriptor的setValidator方法,为它添加验证的功能,通过实现ICellEditorValidator 接口的isValid方法实现。
基于Eclipse GEF关键技术的分析与研究(2007-03-31 16:54:28)
2.Draw2D技术
轻量级框架:轻量级框架[LightweightSystem类]把SWT和Draw2D 连接起来,它把鼠标事件和画图事件从SWT 转发给Draw2D的图形上。它是Draw2D的核心类。
LightweightSystem 主要包含三个组成部件:
1.根图形[The root figure]: 根图形是RootFigure类的实例,应用程序的根图形必须建立在它之上。它继承了一些SWT Canvas的图形环境,如颜色,字体等。
2.事件转发器[The event dispatche ...
String projectRoot = Platform.getInstanceLocation().getURL().getPath();
IFile file = (IFile) PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage() .getActiveEditor().getEditorInput().getAdapter(IFile.class);IProject project = file.getProject() ...
我的实现代码是:
IWorkbenchWindow window= getPlugin().getWorkbench().getActiveWorkbenchWindow();
window.getActivePage().openEditor(new REditorInput(), REditor.class.getName());
可是每次双击的时候总是打开两个编辑器,不知道是什么问题。。。。
我的文件是通过addFileToProject()直接加上去的,且没有后缀名。。。
你打开的两个编辑器是否都是你自己创建的编辑器?如果是,检查你扩展editor是的设置,是否已经 ...
有时候一个视图(View)希望得到另外一个视图显示的内容,或者选择的内容。在Eclipse中,比较标准的做法是通过ISelectionProvider和ISelectionListener来完成的。不过因为视图往往是独立的,他们之间并不太方便进行直接的事件监听,而且往往一个视图需要对诸多试图进行选择事件的监听,因此在这种情况下对每一个视图的事件进行注册,比较繁琐,有时候也不可能(比如在需要被监听的试图尚未激活的情况下)。
比较典型的例子就是Eclipse本身所提供的PropertySheet和Outline这两个视图,他们都是对其它试图或者Editor中的选择进行监听,并更具选择的内容作相应的 ...
添加一个新的Menu到Workbench时,它的path应该是additions.表示添加到最后。
action are added, not to the menu itself, but to groups within the menu. 因此在添加一个Action到menu之前,首先要定义一些groupMarker或者seperator。
通常创建一个menu的时候,都还要额外添加一个名为additions的seperator来让别人扩展这个Menu
org.eclipse.swt.graphics包(package),包含了管理图形资源的类。只要实现了org.eclipse.swt.graphics.Drawable接口,就可在上面绘画,包括 org.eclipse.swt.widgets.Control 和 org.eclipse.swt.graphics.Image 。 org.eclipse.swt.graphics.GC封装了全部绘画API,包括如何绘制线条、图形、如何绘制文本、图像以及填充图形。 本篇将展示如何使用GC在图像上绘画, 控件的绘画事件(paintEvent)回调。画布(Canvas)控件,因为不同的绘画操作,拥有很多 ...
辅助网格
你可能用过一些这样的应用程序,画布里可以显示一个灰色的网格帮助定位你的图形元素,当被拖动的节点接近网格线条时会被"吸附"到网格上,这样可以很容易的把画布上的图形元素排列整齐,GEF 3.0里就提供了显示这种辅助网格的功能。
图3 辅助编辑网格
是否显示网格以及是否打开吸附功能是由GraphicalViewer的两个布尔类型的属性(property)值决定的,它们分别是 SnapToGrid.PROPERTY_GRID_VISIBLE和SnapToGrid.PROPERTY_GRID_ENABLED,这些属性是通过GriaphicalViewer.getProp ...
第二部分:Router
Router(连线路由器)是对连线进行布局的重要组件,本文介绍了路由器的基本概念和应用场景,剖析了一个连线路由器的接口并给出了一个简单实例。最后演示了如何把自定义的路由器应用到图形中,使得不同的连线可以有不同的路由器。
ConnectionRouter(连线路由器)
图形之间连线的路线,是由连线路由器来决定的。在Shapes Examples中,使用了最短路径路由器,这个路由器会帮我们绕开图形之间的障碍,选择一条最短路径进行连接,如图1所示:
图1. ShortestPathConnectionRouter
命令模式的结构如图:
在我们流程设计器中,实现复制粘贴功能,就是采用了命令模式,以剪切操作为例,当在编辑器中选中活动,在菜单中选择“剪切”,就会产生一个剪切命令(CutCommand对象)。
剪切操作所用到的类如下:
名称
说明
1.一般来说可以继承三种EditPart,分别是
org.eclipse.gef.editparts.AbstractGraphicalEditPart 用于一般图形
org.eclipse.gef.editparts.AbstractConnectionEditPart 用于连线
org.eclipse.gef.editparts.AbstractTreeEditPart 用于大纲视图
2.编辑域[EditDomain] :编辑域是一个起到管理作用的类,它绑定了一个编辑器、若干个查看器和若干个工具。因此它定义了真实的编辑器。编辑域还提 ...
在GMF帮我们生成的应用程序里,画布(Canvas)的布局缺省是使用XYLayout的,这种布局适合UML类图、流程图等应用,但并不适合序列图或表格这类应用。而且目前GMF的.gmfgraph模型里没有提供为整个Canvas设置布局的地方,因此只能通过修改代码的方式实现。因为GMF Runtime是基于GEF的,即GMF生成的代码本质上也是一个GEF应用程序,所以根据以往编写GEF应用程序的经验,不难找到需要修改的地方。
/*********************************************************************************
* layer:
· Layer是一透明的只能被增加到LayeredPane 的图形元素,LayeredPane 要负责管理它的layers。
· FreeFormLayer是一个能够向所有的4个方向扩展的Layer。
· ConnectionLay ...
protected void configureGraphicalViewer(); 这个函数告诉eclipse如何配置编辑器的主界面,在这个函数里我们应该编写创建主界面的代码,并设置EditPart的工厂,关于EditPart的概念,稍后详述,而EditPart的工厂类,主要作用是根据模型创建EditPart,这其中牵扯到GEF的框架以及各个部分的创建顺序(先创建模型,再创建EditPart、最后创建Figure,这些概念都在后面叙述)。 protected PaletteRoot getPaletteRoot(); 这个接口用来创建调色板。调色板的结构实际就是一个颗树,这里用来获得树根。 p ...
刚才经过不懈努力终于解决了,供初学者及同样由此问题的朋友参考:IPath path = new Path(temp.getFilePath());IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("此处为项目名");String relativePath = path.toString().substring(project.getLocation().toString().length() + 1);IFile file = project.getFile(relativePa ...