- 浏览: 979671 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个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程序运行
二、放置EditManager
@Override
public void performRequest(Request req) {
if (req.getType().equals(RequestConstants.REQ_DIRECT_EDIT)) {
HelloWorldDirectEditManager manager = new HelloWorldDirectEditManager(
this, TextCellEditor.class,
new HelloWorldCellEditorLocator((HelloWorldModel) getModel()));
manager.show();
}else{
super.performRequest(req);
}
}
图一
不过编辑完退出后,发现模型图上的文本内容并没有改变:为什么?你告诉我为什么?。。。知道了吧,还是刷新问题。这个简单,已经做了老多次了。修改HelloWorldModel,如下: 4、最后一个需要修改的类就是Policy类:HelloWorldDirectEditPolicy。修改控件类型,如下:
public static final String P_TEXT = "p_text";
public void setText(String text) {
String old = this.text;
this.text = text;
firePropertyChange(P_TEXT, old, text);
}
修改HelloWorldEditPart的propertyChange()方法如下:
public void propertyChange(PropertyChangeEvent evt) {
if (evt.getPropertyName().equals(HelloWorldModel.P_CONSTRAINT)) {
refreshVisuals();
} else if (evt.getPropertyName().equals(HelloWorldModel.P_SOURCE)) {
refreshSourceConnections();
} else if (evt.getPropertyName().equals(HelloWorldModel.P_TARGET)) {
refreshTargetConnections();
}else if(evt.getPropertyName().equals(HelloWorldModel.P_TEXT)){
((Label)getFigure()).setText(((HelloWorldModel)getModel()).getText());
}
}
这下再编辑修改就可以了。
补充:
在Policy里有一个方法:showCurrentEditValue()。这个方法在编辑控件出现后会被调用。你可以在这个方法里做一些事情。
performRequest()方法:并不是每种请求都是发送到Policy上。有一些请求也发送到performRequest方法上。一般来说它用来处理一些并不需要立即修改model的请求,比如说显示直接编辑控件 、双击事件等等。修改模型的时候还得需要Policy和Command的参与。
CompoundComand:还有一种命令是CompoundCommand命令。可以把一系列命令放到一个CompoundCommand对象里,然后返回这个对象。这样就相当于放在其中的一系列命令都被执行了。通常会有一些使用的场景。
三、ComboboxCellEditor
我们再试一种CellEditor。把上面的TextCellEditor改为ComboboxCellEditor。
这里我们有几个地方需要修改:
1.HelloWorldDirectEditManager类里:增加一个参数在构造函数里,用来初始化Combo的元素,最终修改如下:
public class HelloWorldDirectEditManager extends DirectEditManager {
private String[] items;
public HelloWorldDirectEditManager(GraphicalEditPart source,
Class editorType, CellEditorLocator locator, String[] items) {
super(source, editorType, locator);
this.items = items;
}
@Override
protected void initCellEditor() {
CCombo text = (CCombo) getCellEditor().getControl();
HelloWorldModel model = (HelloWorldModel) getEditPart().getModel();
text.setText(model.getText());
}
@Override
protected CellEditor createCellEditorOn(Composite composite) {
try {
Constructor constructor = ComboBoxCellEditor.class
.getConstructor(new Class[] { Composite.class,
String[].class });
return (CellEditor) constructor.newInstance(new Object[] {
composite, items });
} catch (Exception e) {
return null;
}
}
@Override
protected boolean isDirty() {
return !((CCombo) getCellEditor().getControl()).getText().equals(
((HelloWorldModel) getEditPart().getModel()).getText());
}
}
后面两个追加的重写方法有点奇怪是吧?我也不知道为什么我需要重写这两个方法。
没有重写上面第一个方法时,编辑控件根本不出来。这是因为缺省的它会查询CellEditor中是否有一个带Composite对象参数的构造方法,如果没有,则返回null。所以如果不重写,总是返回null,因为ComboboxCellEditor没有这类的构造方法。
重写第二个方法是因为如果不重写,它总是认为isDirty()是false,所以在commit()方法里,就直接跳出了。
不知道是不是我有哪个地方理解不对造成这样的结果。不过暂时我们先这样用着。
2.HelloWorldEditPart。显然是需要修改performRequest()方法,就是修改编辑器类的类型,再在editManager里追加一个参数,如下:
@Override
public void performRequest(Request req) {
if (req.getType().equals(RequestConstants.REQ_DIRECT_EDIT)) {
HelloWorldDirectEditManager manager = new HelloWorldDirectEditManager(
this, ComboBoxCellEditor.class,
new HelloWorldCellEditorLocator((HelloWorldModel) getModel()),new String[]{"name1","name2"});
manager.show();
}else{
super.performRequest(req);
}
}
3、修改HelloWorldCellEditorLocator类。有一点我们需要注意的是:ComboboxCellEditor里的控件是CCombo。所以不要弄错了。一开始我就写成了Combo。所以结果总是异常。这个类修改如下,其实就是把控件类型修改一下:
public class HelloWorldCellEditorLocator implements CellEditorLocator {
private HelloWorldModel model;
public HelloWorldCellEditorLocator(HelloWorldModel model) {
super();
this.model = model;
}
public void relocate(CellEditor celleditor) {
CCombo text = (CCombo) celleditor.getControl();
Rectangle constraints = model.getConstraints();
text.setBounds(constraints.x, constraints.y, constraints.width,
constraints.height);
}
}
public class HelloWorldDirectEditPolicy extends DirectEditPolicy {
@Override
protected Command getDirectEditCommand(DirectEditRequest request) {
CCombo text = (CCombo) request.getCellEditor().getControl();
DirectEditHelloWorldCommand command = new DirectEditHelloWorldCommand(
(HelloWorldModel) getHost().getModel(), text.getText().trim());
return command;
}
@Override
protected void showCurrentEditValue(DirectEditRequest request) {
}
}
最后我们的效果如下:
图:修改时 修改后
发表评论
-
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开发指南与入门系列宝典打包下载。
GEF入门实例代码2《Eclipse插件开发》中实例
安装m2eclipse插件时会依赖gef插件和svn插件,压缩包内包含m2eclipse + gef + svn的全部插件安装包,可以直接离线安装,本人亲测,在Eclipse3.7下安装成功,可以新建Maven项目。 需要注意的是,在离线安装时,切记...
Eclipse的图形编辑框架GEF的参考API,chm格式
GEF-ALL-3.7 GEF-ALL-3.8 官方包。 GEF Draw2d 学习资料
RCP GEF 入门教程,从法语班翻译过来的,自认为是比较全面细致的GEF入门教程,比八进制的《GEF入门系列》要浅显易懂。
GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的建立图形化的编辑器,V(View)的部分常常是基于SWT的Draw2D,因此Draw2D也看作是GEF的一部分。依赖:org.eclipse.gef***, org...
我下的资源的打包,希望有帮助,包括:GEF_Tutorial,GEF实例,入门教程,GEF-whole-upload