- 浏览: 987504 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
运乃强谦:
老哥,你确定这个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 1357第一步 增加Palette项: moveTool = n ... -
Draw2d的ScrollPane的使用
2011-04-19 15:05 1602ScrollPane scrollpane = ne ... -
GEF的动态变化二
2011-04-13 10:47 1333之前有一篇文件介绍怎么实现GEF Editor中的图元的渐近、 ... -
(译)Eclipse Zest二
2011-01-07 15:41 19545. Zest和JFace的例子 5.1 创建工程 创建一 ... -
(译)Eclipse Zest一
2011-01-07 15:14 28831. Eclipse Zest 1.1 概述 Eclips ... -
增加GEF的动态性
2011-01-06 10:25 1780在一个GEF应用中,最常的操作是移位和缩放。移位和缩放实现本身 ... -
GEF中Palette项的属性页显示
2010-11-04 14:25 2002一般来说我们只需要在GraphicalViewer部分显示在P ... -
定制GEF的Palette
2009-11-23 16:35 2533用GEF框架实现一个Editor时,会有一个默认的palett ... -
GEF增加之连接助手二
2009-10-29 16:01 1027上一篇说过怎么实现悬浮连接助手。一直想要怎么实现悬浮连接助手。 ... -
GEF功能增强之创建助手
2009-09-28 09:09 1704用过GMF就知道,GMF默认生成的editor有一个悬浮的创建 ... -
GEF功能增强之连接助手
2009-09-10 14:45 1802GEF图形编辑器中,通常 ... -
GEF中实现“拷贝为图片”
2009-09-06 09:13 1356在一个GEF的编辑器中,编辑器上是一个个的Figure,从外观 ... -
GEF中扩大、缩小时处理编辑行为
2008-12-30 10:54 1523我们为GEF应用提供了ZoomIn和ZoomOut功能之后,在 ... -
改变GEF的一些默认行为
2008-12-29 14:12 1421一、改变Layer GEF中会根据editpart的类 ... -
GEF中一个模型的多层图的问题
2008-12-26 16:00 1642一般来说,我们在做GEF的时候,通常是一个模型对应一个图,这个 ... -
GEF中增加ContextMenu的支持
2008-12-19 22:32 2635GEF中,增加对EditPart的右键菜单的支持是很普遍的一 ... -
增加Palette的拖放支持
2008-12-19 14:08 1962默认情况下,GEF中要创建一个新的结点都是通点在Palette ... -
给GEF拖放功能
2008-07-17 10:26 1889我们知道SWT支持Native的拖放。GEF使用SWT的拖放来 ... -
修改GEF中Connection的端点
2008-07-14 16:09 1817GEF中,选中一条连接线,默认的端点是两个小黑框,如下: ... -
GEF中导视图的使用
2008-07-10 17:01 2183有时增加一个导视图能给用户很大的方便性,例如在outline视 ...
相关推荐
在GEF(Graphical Editing Framework)中,理解其工作流程对于开发图形编辑工具至关重要。GEF主要用于构建基于SWT和JFace的图形用户界面,它提供了丰富的功能来处理图形元素的绘制、操作和交互。本篇文章将深入探讨...
【GEF理解系列二】是深入学习GEF框架的第二部分,主要讲解如何配置和初始化Editor,以及如何创建多层结构以支持添加多个图形。GEF(Graphical Editing Framework)是一个用于构建图形编辑器的开源框架,常用于开发...
本资料集旨在为初学者提供一个全面的入门指南,帮助理解GEF的基础概念和实现方法。 GEF的核心功能是提供了一套强大的组件和API,用于创建可交互的、图形式的用户界面。通过使用GEF,开发者可以轻松地创建出具有拖放...
2. **GEF框架**: - GEF提供了图形编辑的基础组件,如模型、视图、控制器(MVC)架构。 - 它提供了一套图形工具,如绘图工具、选择工具和连接线工具。 - GEF支持命令模式,使得操作可以撤销/重做。 - 它还包含...
**GEF入门系列 PDF 格式资料** GEF(Graphical Editing Framework)是Eclipse开源组织推出的一个图形编辑框架,主要用于构建可视化的图形编辑...在阅读过程中,建议结合实际编程实践,以便更好地理解和掌握GEF的精髓。
- 示例代码:Eclipse项目中包含多个GEF示例,是学习和理解GEF的好资料。 - 在线教程:互联网上有许多博客和教程,针对不同水平的学习者提供了丰富的教学内容。 通过这个GEF入门系列,你可以逐步掌握如何利用GEF...
本入门系列旨在帮助初学者快速理解并掌握这两个强大的工具。 EMF是Eclipse项目的一部分,它提供了一种模型驱动的开发方式。EMF允许开发者创建、存储和操作数据模型,这些模型可以用来表示复杂的数据结构或业务逻辑...
2. "GEF入门系列(一、Draw2D).doc" 可能是一个逐步的教学系列,从基础的Draw2D开始,逐步引入GEF的概念和应用。 3. "如何在Eclipse3.3.1.1中安装VE,emf,GEF插件.doc" 提供了在特定版本的Eclipse中安装相关插件的步骤...
2. GEF的基本概念:深入理解模型、表示层、编辑器和控制器的概念。 3. 编辑器的生命周期:学习编辑器的创建、打开、保存和关闭过程。 4. 图形元素的定义:创建自定义的图形节点和连接线,定义它们的外观和行为。 5. ...
这个实例代码2是《Eclipse插件开发》教程中的一部分,旨在帮助初学者理解如何利用GEF来创建自定义的图形编辑器。在Eclipse插件开发中,GEF提供了一套强大的框架,使得开发者可以方便地构建出功能丰富的图形用户界面...
为了帮助读者更好地理解GEF框架的实际应用,作者提供了由简至繁的一系列示例项目。这些项目按序排列,从最简单的pt1开始,逐步添加新功能,最终形成一个具备DirectEdit、Palette等功能的图形编辑器。这种逐步递进的...
这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...
4. **流程设计基础**:在gef框架下进行流程设计,首先要明确流程的目标和步骤,这可能涉及到对程序逻辑的理解和拆解,将复杂的任务分解为一系列可执行的子任务。这通常需要扎实的编程基础和问题解决能力。 5. **gef...
### GEF(Graphical Editing Framework)入门教程知识点详解 #### 一、简介 GEF(Graphical Editing Framework),即图形编辑框架,是一种基于...希望您能够通过实践加深对GEF的理解,并成功地应用于自己的项目中。
- **Control(控制器)**:这部分主要是由一系列`EditPart`组成,它们是GEF的核心组件。每个`EditPart`都对应于模型中的某个元素,并负责处理用户交互。 #### 四、Draw2D的核心组件——LightweightSystem **...
**3gef**可能是这个系列教程的一个特定版本或者阶段,强调了对GEF的三次迭代改进或深化理解。这可能涉及到更高级的功能,如图形的动态更新、自定义手势识别或者与其他Eclipse插件的集成。 **gef_eclipse**标签表明...
这个"eclipse_gef_example.rar"压缩包提供了一系列的例子,帮助开发者更好地理解和掌握GEF框架。以下是对每个部分的详细解释: 1. **org.eclipse.gef.examples.text** 这个部分主要展示了如何在GEF环境中处理文本...
2. **反汇编和指令分析**:gef可以展示程序的反汇编代码,帮助理解执行流程,并能解析和操作寄存器。 3. **调试信息**:gef能够显示函数调用栈、线程状态、共享库信息等,便于追踪问题源头。 4. **性能分析**:gef...