- 浏览: 979669 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个wsdl 地址 可以访问?
[CXF] Server与Client实现方式五:HTTPS -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
[CXF] Server与Client实现方式四:JMS -
dengmiao:
JAXB学习三 (验证) -
panamera:
你好。可以提供maven pom配置是怎么配置的?不知道你使用 ...
[CXF] Server与Client实现方式四:JMS -
u010221220:
请问楼主一二三部分的代码都应该放在哪个函数体中。
使用JDI监听Java程序运行
到现在为止,我们已经完成了很多工作了:图形的缩放,移动;增加,删除;连线的增加删除,重定向。
不过我们还没有办法修改我们HelloWorld上的文字。这一节我们就来实现对文字的修改。
一、直接编辑的支持
要想支持编辑功能。显示我们也需要安装Policy,写command。那好,我们先做好这部分工作。
EditPolicy里有一个直接编辑Policy:DirectEditPolicy。我们写一个子类继承这个Policy,然后显然应该把它安放在HelloWorldEditPart上。OK,先完成这些。
在HelloWorldEditPart里安装Policy:
installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new HelloWorldDirectEditPolicy());
实现HelloWorldDirectEditPolicy:
public class HelloWorldDirectEditPolicy extends DirectEditPolicy {
@Override
protected Command getDirectEditCommand(DirectEditRequest request) {
return null;
}
@Override
protected void showCurrentEditValue(DirectEditRequest request) {
}
}
下面我们先完成编辑命令。显示要完成这个编辑,我们至少需要两个东西:当前编辑的HelloWorld对象、修改后的值。所以我们的command可以实现如下:
public class DirectEditHelloWorldCommand extends Command {
private HelloWorldModel model;
private String text;
private String old;
public DirectEditHelloWorldCommand(HelloWorldModel model, String text) {
super();
this.model = model;
this.text = text;
}
@Override
public void execute() {
old = model.getText();
model.setText(text);
}
@Override
public void undo() {
text = model.getText();
model.setText(old);
}
}
再回过头来完成我们的Policy:
public class HelloWorldDirectEditPolicy extends DirectEditPolicy {
@Override
protected Command getDirectEditCommand(DirectEditRequest request) {
Text text = (Text) request.getCellEditor().getControl();
DirectEditHelloWorldCommand command = new DirectEditHelloWorldCommand(
(HelloWorldModel) getHost().getModel(), text.getText().trim());
return command;
}
@Override
protected void showCurrentEditValue(DirectEditRequest request) {
}
}
方法showCurrentEditValue后面我们再讲。这里我们还有一个假设:假设编辑控件是一个text框,至于具体是什么,应该由你选择的CellEditor的类型决定,所以可以肯定在这里我们将选择TextCellEditor。在做树和表的编辑时我们也会用到这个。
我们已经完成了一个完整的过程。按理说我们可以操作了。一般来说GEF上的编辑都是单击鼠标就可以显示出来了。但是现在如果我们单击鼠标,什么也不会出现。为什么呢?
上面我们也提到了,我们选择了TextCellEditor,所以我们在Policy里就把CellEditor的Control强制为Text。我们是这样做的。不过想一想,好像我们还没有在哪个地方告诉GEF我们的选择吧?没有,绝对的没有。
而且除此之外,还有一个问题:假如GEF知道我们是要用TextCellEditor。它又怎么知道这个Text放在什么位置、大小如何呢?这些都是要考虑的问题。所以我们必须有一个地方告诉它这些问题的答案。
这里就要提到另一个类:DirectEditManager。要想实现直接编辑功能,我们需要提供一个DirectEditManager类,用来给出上面问题的答案。DirectEditManager是一个抽象类,我们必须给出一个具体的实现。那我们就首先实现我们的DirectEditManager类。首先看一下DirectEditManager的构造方法(选其中一个):
public DirectEditManager(GraphicalEditPart source, Class editorType, CellEditorLocator locator) 基中: @param source the source edit part:要编辑的模型的EditPart @param editorType the cell editor type:编辑单元类,如TextCellEditor.class @param locator the locator:决定编辑控件的大小和位置,需要自己实现 OK,那现在我们需要实现的类有两个:一个DirectEditManager的实现类;一个CellEditorLocator的实现类。 我们首先来实现CellEditorLocator的实现类: public class HelloWorldCellEditorLocator implements CellEditorLocator { private HelloWorldModel model; public HelloWorldCellEditorLocator(HelloWorldModel model) { super(); this.model = model; } public void relocate(CellEditor celleditor) { Text text = (Text) celleditor.getControl(); Rectangle constraints = model.getConstraints(); text.setBounds(constraints.x, constraints.y, constraints.width, constraints.height); } } 这里我们增加了一个构造方法,传入编辑的模型,让编辑控件的大小刚好等于编辑模型的图形大小。 下面实现DirectEditManager: public class HelloWorldDirectEditManager extends DirectEditManager{ public HelloWorldDirectEditManager(GraphicalEditPart source, Class editorType, CellEditorLocator locator) { super(source, editorType, locator); } @Override protected void initCellEditor() { Text text = (Text) getCellEditor().getControl(); HelloWorldModel model = (HelloWorldModel) getEditPart().getModel(); text.setText(model.getText()); } } 这里我们让编辑控件的初始值为模型的text值。 完了,完成了两个类的实现。下面就是要想把它放哪了。
发表评论
-
GEF中用鼠标移动画布
2011-12-27 13:37 1327第一步 增加Palette项: moveTool = n ... -
Draw2d的ScrollPane的使用
2011-04-19 15:05 1588ScrollPane scrollpane = ne ... -
GEF的动态变化二
2011-04-13 10:47 1299之前有一篇文件介绍怎么实现GEF Editor中的图元的渐近、 ... -
(译)Eclipse Zest二
2011-01-07 15:41 19135. Zest和JFace的例子 5.1 创建工程 创建一 ... -
(译)Eclipse Zest一
2011-01-07 15:14 28401. Eclipse Zest 1.1 概述 Eclips ... -
增加GEF的动态性
2011-01-06 10:25 1755在一个GEF应用中,最常的操作是移位和缩放。移位和缩放实现本身 ... -
GEF中Palette项的属性页显示
2010-11-04 14:25 1951一般来说我们只需要在GraphicalViewer部分显示在P ... -
定制GEF的Palette
2009-11-23 16:35 2502用GEF框架实现一个Editor时,会有一个默认的palett ... -
GEF增加之连接助手二
2009-10-29 16:01 1009上一篇说过怎么实现悬浮连接助手。一直想要怎么实现悬浮连接助手。 ... -
GEF功能增强之创建助手
2009-09-28 09:09 1675用过GMF就知道,GMF默认生成的editor有一个悬浮的创建 ... -
GEF功能增强之连接助手
2009-09-10 14:45 1780GEF图形编辑器中,通常 ... -
GEF中实现“拷贝为图片”
2009-09-06 09:13 1320在一个GEF的编辑器中,编辑器上是一个个的Figure,从外观 ... -
GEF中扩大、缩小时处理编辑行为
2008-12-30 10:54 1498我们为GEF应用提供了ZoomIn和ZoomOut功能之后,在 ... -
改变GEF的一些默认行为
2008-12-29 14:12 1390一、改变Layer GEF中会根据editpart的类 ... -
GEF中一个模型的多层图的问题
2008-12-26 16:00 1614一般来说,我们在做GEF的时候,通常是一个模型对应一个图,这个 ... -
GEF中增加ContextMenu的支持
2008-12-19 22:32 2609GEF中,增加对EditPart的右键菜单的支持是很普遍的一 ... -
增加Palette的拖放支持
2008-12-19 14:08 1937默认情况下,GEF中要创建一个新的结点都是通点在Palette ... -
给GEF拖放功能
2008-07-17 10:26 1862我们知道SWT支持Native的拖放。GEF使用SWT的拖放来 ... -
修改GEF中Connection的端点
2008-07-14 16:09 1794GEF中,选中一条连接线,默认的端点是两个小黑框,如下: ... -
GEF中导视图的使用
2008-07-10 17:01 2148有时增加一个导视图能给用户很大的方便性,例如在outline视 ...
相关推荐
GEF理解之第一部分,学习gef必备文档资料啊,值得下载
GEF理解之第三部分,学习gef必备文档资料啊,值得下载
GEF理解之第二部分,学习gef必备文档资料啊,值得下载
GEF入门必读 GEF入门系列 GEF-whole-upload 感谢八进制
GEF 入门系列 GEF
Eclipse插件开发:GEF入门系列宝典
GEF入门系列,八进制 的GEF入门系列教程, 由社区经作者授权后整理而成GEF(Graphical Editor Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。这样的应用程序有很...
由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。
适合gef初学者学习,本人认为是一个很不错的学习材料
emf介绍系列和gef入门介绍打包,适合新人快速掌握。
GEF是公司内部资料,在此提供给大家学习参考。
Eclipse插件开发--gef开发指南与入门系列宝典打包下载。
RCP GEF 入门教程,从法语班翻译过来的,自认为是比较全面细致的GEF入门教程,比八进制的《GEF入门系列》要浅显易懂。
我下的资源的打包,希望有帮助,包括:GEF_Tutorial,GEF实例,入门教程,GEF-whole-upload
资源就不用多介绍了,想下的都知道是什么东西。。。 这是非加密版,所以你可以随意加注释,作笔记
GEF eclipse 插件
GEF简易教程-学习GEF的入门教程,不错的gef入门教程
gef 绘图折线的实现方法。 gef API chm 格式
eclipse GEF-ALL-3.4.2(1)