文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发数据结构使用图形编辑框架创建基于 Eclipse 的应用程序
精品推荐
特别推荐
·网游外挂编写完全攻略
·开发WDM型的USB设备驱动程序
·数据库设计范式深入浅出
·理解软件保护技术之序列号方式
·大型网站必鉴:分销渠道的结构
·你的代码真的很健壮吗
·利用HOOK拦截封包原理
·四种网络游戏外挂的设计方法
·程序语言效率比较
·五子棋算法
热点TOP10
·剖析备份个人数据十大注意事项
·BPEL的基本活动介绍
·BPEL模型基础
·VS2005视频教程之站点地图[视频]
·DB2数据库部分日常实用操作
·数据结构教程 第十五课 串的表示和实现
·MD5算法解释
·逆向思维 《魔兽世界》封包分析
·IE工具条插件Toolbar开发简介
·网游外挂编写完全攻略

使用图形编辑框架创建基于 Eclipse 的应用程序

日期:2008年6月12日 作者: 查看:[大字体 中字体 小字体]



图 4. 查看器中的 EditPart

使用图形编辑框架创建基于 Eclipse 的应用程序(图四)


内容的图形不是很有趣,并且它通常只是一个空面板,该面板将包含图的子图。它的图形应该为不透明类型(opaque),并且应当利用布局管理器进行初始化,该布局管理器将对图的子图进行布局。但是,它将拥有结构。图的直系子图是由返回的子模型对象列表确定的。清单 1 显示了一个样本内容 EditPart,它创建了一个不透明类型的图形,后者将使用 XYLayout 定位其子图。

清单 1. 内容 EditPart 的初始实现

public class DiagramContentsEditPart extends AbstractGraphicalEditPart {
protected IFigure createFigure() {
Figure f = new Figure();
f.setOpaque(true);
f.setLayoutManager(new XYLayout());
return f;
}

protected void createEditPolicies() {
...
}

protected List getModelChildren() {
return ((MyModelType)getModel()).getDiagramChildren();
}
}

要确定图上的项,需要实现方法 getModelChildren() 。该方法返回子模型对象的列表(例如图中的节点)。超类将使用这个模型对象列表来创建对应的 EditPart。新创建的 EditPart 被添加到部件的子 EditPart 列表。这样又会将每个子 EditPart 的图形添加到示例图。缺省情况下,将返回一个空的列表,这表明没有子对象。

其它图形 EditPart
其余的 EditPart(表示图中的项)可能拥有要以图形方式显示的数据。它们可能还拥有自己的结构,例如连接或自己的子 EditPart。许多 GEF 应用程序利用由标签注明的图标之间的连接来描述这些图标。让我们假定您的 EditPart 将使用 Label 作为它的图形,并且您的模型提供了名称、图标以及与标签之间的连接。清单 2 显示了实现这种类型 EditPart 的第一次尝试。

清单 2. “节点”EditPart 的初始实现

public class MyNodeEditPart extends AbstractGraphicalEditPart {
protected IFigure createFigure() {
return new Label();
}
protected void createEditPolicies() {
...
}
protected List getModelSourceConnections() {
MyModel node = (MyModel)getModel();
return node.getOutgoingConnections();
}
protected List getModelTargetConnections() {
MyModel node = (MyModel)getModel();
return node.getIncomingConnections();
}
protected void refreshVisuals() {
MyModel node = (MyModel)getModel();
Label label = (Label)getFigure();
label.setText(node.getName());
label.setIcon(node.getIcon());

Rectangle r = new Rectangle(node.x, node.y, -1, -1);
((GraphicalEditPart) getParent()).setLayoutConstraint(this, label, r);
}
}

这里覆盖了一个新方法 refreshVisuals() 。当需要利用来自模型的数据更新图形时,就调用该方法。在本案例中,模型的名称和图标被反映在标签中。但更为重要的是,该标签是通过将其布局约束传递给父元素来定位的。在内容 EditPart 中,我们使用了 XY 布局管理器。该布局使用 Rectangle 约束来确定在何处放置子图形。宽和高的值为“-1”,表明应当为该图提供理想的大小。

技巧 #1
决不要使用 setBounds(...) 方法来放置图形。使用诸如 XYLayout 之类的布局管理器确保会正确地更新滚动条。另外,XYLayout 还处理将相对约束转换成绝对位置的工作,并且可用它来将图形自动调整为理想的大小(换而言之,如果约束的宽和高为 -1)。

方法 refreshVisuals() 仅在 EditPart 初始化的过程中调用一次,并且决不会被再次调用。在响应模型通知时,应用程序负责根据需要再次调用 refreshVisuals() 以更新图形。要改进性能,您可能希望将每个模型属性的代码分解成其自己的方法(或者是一个带有“开关(switch)”的方法)。这样,当模型发出通知时,可以运行最少的代码以便只刷新那些发生更改的内容。

上一页 [1] [2] [3] [4] [5] [6] 下一页 




上一篇:利用套接字机制实现Flash与数据库连接

下一篇:注册ActiveX控件的几种方法

相关文章:
·为什么iexplore.exe在打开网页时CPU使用会100%?
·溯雪使用说明
·键盘的使用与指法训练
·从零开始 无线网络终极应用宝典
·Firefox 使用常见问题和解决方法
·GHOST使用方法(图解)
·注册表应用100例—注册表使用全攻略之十一
·Vista系统使用技巧总结
·添加或删除启动时自动运行的程序
·WindowsXP应用技巧的具体总结
相关软件:
·黑客视频教程 VMware虚拟机的安装和使用
·C语言程序设计
·黑客视频教程-灰鸽子远控使用教程
·使用GPMC随心所欲管理组策略
·Adobe Photoshop CS 2 简体中文使用指南
·Windows环境下32位汇编语言程序设计
·数码相机购买使用宝典 V1.03.29
·注册表实例应用视频教程swf
·Excel应用宝典
·AUTOCAD 2002机械设计应用与实例

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot