- 浏览: 2488374 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
FROM:http://blog.csdn.net/javamxj/archive/2005/04/29/368432.aspx
Draw2d是一个轻量级widget系统,定义了类似控件的一些图形元素,也定义了一些形状。图形元素能够相应各种事件,可以直接在事件处理函数中处理这些事件并对模型进行修改。
如果不需要对编辑图形元素执行编辑过程,只需要应用draw2d就可以完成显示目的。使用draw2d开发图形显示应用程序一般需要三个步骤:
1. 创建一个画布控件。画布控件是一个容器控件,充当一个绘图表面。
2. 创建一个LightWeightSystem对象并将创建的画布对象传递给它。LightWeightSystem对象本身是一个事件监听器。LightWeightSystem对象的主要职责之一是监听画布中的与系统相关的交互事件并将它们转换成draw2d中自定义的事件,然后再将这些事件分发到各个图形元素。另一个主要职责是负责更新画布显示,也就是更新图形元素的显示。
3. 设置LightWeightSystem对象的内容(呈现模型的图形元素),LightWeightSystem要利用LightWeightSystem对象中设置的布局管理器布局这些图形元素。LightWeightSystem持有根图形元素的应用,根图形元素只知道根图形元素,它并不关心内容。当向LightWeightSystem设置内容时,实际上是将内容设置为根图形元素的孩子,并且根图形元素只能有一个孩子,它就是待显示的内容。
在LightWeightSystem对象中有一个根图形元素,这个根图形元素是LightWeightSystem对象中必不可少的一部分,创建根图形元素是创建LightWeightSystem对象过程的其中一个环节。在前面的章节中,多次提到过根图形元素但却没有对根对象进行描述,这里将补上这方面的内容。根图形的职责:
1. 作为应用程序的背景。根图形元素完全覆盖在画布上,用户可以设置根图形元素的显示属性,改变根图形元素的显示属性就可以改变应用程序的背景。
2. 作为内容图形元素的父亲。
3. 作为搜索某个图形元素的搜索入口点。
4. 具备布局属性。因为它是内容图形元素的父亲,所以可以对内容图形元素进行布局。在当前的LightWeightSystem实现中,根图形元素的默认布局是堆叠布局(StackLayout)。
5. 通过绘制根图形元素中某个区域,可以绘制位置落在这个区域之内所有的图形元素。
应用程序不要期望重新定义LightWeightSystem中的根图形元素,这是不允许的。
前面屡次提到内容图形元素(contents figure),它是什么呢?可以把它理解成代表某个具体模型的图形元素。下面以DXF文件为例来描述内容图形元素究竟何方神圣。对于一个DXF文件而言(AutoCAD图形交换格式),该文件是许多图形元素的持久化存储,在DXF文件中定义了每个图形元素该如何显示、它们在模型中的位置等,但是现在不要将DXF文件中定义的图形元素理解成可以直接用draw2d中的图形元素显示的图形元素,而是要将DXF文件中定义的图形元素理解成模型,至于将图形元素模型映射到draw2d中的哪个具体图形元素上,是应用程序的职责,可以有很多不同的映射方法,具体采用那种方法取决于应用程序开发人员。
Dxf文件由7部分组成:
1. HEADER section(标题节)
2. CLASSES section(类节)
3. TABLES section (表节)
4. BLOCKS section(块节)
5. ENTITIES section(实体节)
6. OBJECTS section(非实体节)
7. END OF FILE(文件结束)
对于应用开发人员而言,只需要关心1、3、4、5、7这五部分的内容,它们记录了我们所需要的图形信息。其中HEADER section(标题节)中说明了有关图形的一般信息。比较重要的信息是:文件的版本、图形的大小、绘图所用的单位、角度的单位、角度的精度、角度的方向;ENTITIES详细定义了各种图形元素模型,例如多边形、矩形等。
从DXF文件的HEADER节中,就可以知道DXF文件所代表的模型的大小。谈到模型,我需要谈谈我对模型的定义和理解:模型是无限2D平面中的一个有限矩形区域,模型有约束矩形框,该约束矩形框定义了应用程序建模所定义的2D平面的矩形区域。DXF文件的HEADER节定义了DXF模型所代表的2D平面中的一个有限矩形区域,在ENTITIES节中所定义的所有的图形元素模型都位于该矩形区域范围之内。解析DXF文件的过程,实际上就是将DXF从文件映射到内存中表示的模型序列,也就是在解析文件的过程中,用代表DXF的模型重构DXF文件。下图就表示了代表DXF文件的模型,因为只是示意的缘故,我只在模型中展示了HEADER节和ENTITIES节。
DXF模型图
DXFModel代表整个DXF文件,DXFHeader代表dxf文件中的HEADER节,DXFEntities代表DXF文件中定义的各种图形元素模型。的集合,DXFEntity代表DXF文件中定义的各种图形元素模型。
现在定义一个类,用来解析DXF文件:DXFParser,该内中定义了一个方法read()。
- Public class DXFParser
- {
- public DXFModel Parse(string filename);
- }
通过DXFParser类的一个实例并对该实例调用Parse方法,就可以获取一个代表DXF文件的DXFModel对象即DXF模型。
在获取了代表DXF文件大的DXFModel模型对象后,就需要用图形库呈现DXFModel了,应用程序开发人员把可以用不同的图形库去呈现它,但这里我将介绍如何用draw2d去呈现它。Draw2d定义了用于可以执行呈现任务的图形元素,DXFModel代表DXF数据模型,那么如果打算用Draw2d呈现DXFModel对象,必须定义一个执行从模型到视图(draw2d中定义的各种图形元素或开发人员自定义的但从draw2d中派生的图形元素)映射任务的中间层或类。这里用类来完成模型到视图的映射,将这个映射类定义为:
MapDxfToDraw2d。在映射过程中有许多方面需要考虑:
1. DXFModel代表一个完整的DXF数据模型,那么肯定需要定义一个图形元素来表示代表整个DXF图形的图形元素,这里将这个图形元素定义为DxfDiagram。
2. 因为DXF Header模型所代表的数据并不代表图形,它只是对DXFModel对象的属性描述,所以可以在DxfDiagram中定义一个属性类,该属性类中的属性直接映射到DXFHeader图形元素。
3. 在DXF模型中,每个图形元素模型都被指定存在于某个特定的图层上,也就是说,DxfDiagram由许多图层组成,而每个图层中含有多个图形元素模型。根据这个关系,可以定义DxfLayer代表图层,DxfFigure代表所有图形元素的基类。DXF模型中的每个图形元素模型都同时含有呈现属性和表示图形元素位置的几何属性,所以比较容易将DXF模型中定义的图形元素模型映射到相应的图形元素上去。
模型到视图(draw2d)映射图
上图表示:
1. 以DXFModel作为输入,MapDxfToDraw2d映射器要负责完成从模型到呈现它的视图的变换,其输出就是变换结果:代表DXF图形的图形元素DxfDiagram。
2. DxfDiagram、DXFLayer、DXFFigure都从draw2d中的Figure中派生而来,但DxfDiagram由DXFLayer组成,DXFLayer由DXFFigure组成。
在获得了DxfDiagram后,就大功告成了。这个DxfDiagram对象就是要设置给LightWeightSystem的内容。下面的代码是Draw2d LightWeightSystem类中设置内容的源码:
- public void setContents(IFigure figure) {
- if (contents != null)
- root.remove(contents);
- contents = figure;
- root.add(contents);
- }
代码表明,当设置LightWeightSystem中待显示的内容时,LightWeightSystem首先要检查当前LightWeightSystem中是否已经显示了其它的内容,如果是,那么就从根图形中删除掉以前存在的内容。最后将内容作为孩子增加到根图形元素。前面已经提到过,根图新元素对于LightWeightSystem而言,非常重要;当LightWeightSystem接到通知,需要绘制某个范围的图形元素时,它总是直接调用根图形元素的Paint()方法,在Paint()方法中,根图形元素会调用内容图形元素的Paint()方法,内容图形元素然后在依次调用其孩子的Paint()方法……。
上面讲了一大堆,主要是说明什么是内容图形元素、如何将模型映射到draw2d以及内容图形元素根图形元素之间的关系。
下面该所说什么是图形元素了,这也是本章的终点,呵呵,到现在为止才切入正体。
前面提到过, draw2d的图形元素采用Composite模式设计,最核心的设计图如下所示:
IFigure接口中定义了图形元素的所有的公共抽象,Figure是IFigure的基本实现。强烈建议不要直接实现IFigure接口以定义新的图形元素,而是要从Figure派生,因为Figure对于IFigure中的许多方法提供了很好的缺省实现,如果你觉得哪个方法不合适,你可以重写它。
在讨论draw2d中的完整的图形元素类层次之前,需要对draw2d中的图形元素的特点进行一番描述,为更好的理解draw2d中的类层次铺平道路。
1. IFigure可以处理来自LightWeightSystem中的事件派发器中派发过来的事件,所以在IFigure类中定义了许多的handleMouseDown()等之类的方法。LightWeightSystem中的事件派发器向IFigure 派发事件的过程实际上就是调用IFigure 的handle…方法序列。
2. IFigure是事件监听器容器。IFigure并不直接处理事件,它将实际的事件处理委托给外部的事件监听器。假如某个图形元素需要对鼠标右键作出响应,例如弹出针对当前图形元素的鼠标右键等,那么就需要定义一个专门处理鼠标右键事件的类(实现MouseListener接口),然后将该类注册到IFigure中。所以在IFigure中定义了大量的addMouseListener之类的方法;既然能够向IFigure中注册事件处理器,那么也需要能够从IFigure中注销事件处理器,所以在IFigure中也定义了大量的RemoveMouseListener之类的方法。
3. IFigure中没有定义与选择相关的内容,因为选择已经属于编辑的范畴了,而draw2d只负责呈现而不负责编辑,所以干脆就没有在IFigure中定义与选择相关的内容。例如,通常,在图形元素中都要定义一个字段以表明图形元素是否处于被选中状态,但在draw2d中却没有。(GEF中定义了如何记录被选中的图形元素方面内容,请参考EditPart接口)。
4. IFigure有聚焦、使能、遍历等只有控件才需要的属性,我刚开始时也被这些属性给搞蒙了,但不要奇怪,因为draw2d是一个轻量级的Widget系统,它要用图形元素模拟控件,所以在IFigure中包含这些属性就可以理解了。
5. 每个图形元素都有一个确切的约束范围,这个约束范围就是它在绘图表面上呈现时的呈现位置。既然有约束范围,它就应该有边界。显然可以用一个图形元素来表示边界,因为边界是可以图形化的。在draw2d中,边界并没有被当作图形元素来处理,也就是说它并不是从Figure中派生而来的。每个图形元素可以有边界,也可以没有边界,可以调用setBorder(Border border) 为图形元素设置边界。
6. 因为一个Figure是一个复合对象,它可以包含子图形元素,那么这些子图形元素该如何布局呢?这就设计到布局的概念了。每个Figure都可以拥有一个布局管理器,以对它所拥有的孩子进行布局。在draw2d中定义中定义了大量的布局管理器。
发表评论
-
Java程序员25个必备的Eclipse插件
2012-01-12 22:36 21967原文:http://www.fromdev.com/2012/ ... -
关于插件更新安装的错误
2007-12-21 20:12 2246在更新插件的时候出现这样的错误: Unable to comp ... -
最近做eclipse branding, features的一些经验
2007-12-16 01:24 4586知道eclipse的splash怎么做 ... -
GEF学习笔记
2007-12-07 20:20 4189GEF以前学习过, 而且还 ... -
SWT布局深入学习
2007-11-30 23:00 7975以下内容是学习"The Definitive Gui ... -
Eclipse Action 深入学习笔记(3)
2007-11-25 17:59 4145filter元素是用来指定当 ... -
Eclipse Action 深入学习笔记(2)
2007-11-25 17:14 5249Object Action 这种Action是跟弹出的上下文菜 ... -
Eclipse Action 深入学习笔记(1)
2007-11-25 17:07 7714以前做插件用到的ActionSet都只是依葫芦画瓢,没有真正理 ... -
JFace Text Editor完全掌握之终极指南(4)
2007-11-24 17:08 5709错误标识(Error Marking) Error Marki ... -
JFace Text Editor完全掌握之终极指南(3)
2007-11-24 16:56 5552内容大纲 之所以要给编 ... -
JFace Text Editor完全掌握之终极指南(2)
2007-11-24 16:53 6766最后一步就是实现各种功能 语法高亮 首先我们要实现的是语法高亮 ... -
JFace Text Editor完全掌握之终极指南(1)
2007-11-24 16:17 10035JFace Text Editor是JFace里面一个功能强大 ... -
最近的Eclipse plugin开发总结
2007-11-24 11:30 4963List控件没有提供addDblClickListener方法 ... -
eclipse3.3关于JavaFileEditorInput兼容性问题的解决
2007-11-24 11:22 4697在eclipse3.3中,JavaFileEditor ... -
Eclipse WTP Projects Facets实战指南(2)
2007-11-21 21:13 5293修饰工作 给facet在选择列表中添加图标 格式如下: xml ... -
Eclipse WTP Projects Facets实战指南(1)
2007-11-21 20:21 9626这个文章基本是"Building Project F ... -
也说关于WizardPage的动态生成
2007-11-05 14:26 5181在Eclipse中一个Wizard=Wiza ... -
关于多页编辑器中不同Editor之间的Redo&Undo冲突的解决
2007-09-03 15:17 4102在我们的插件工具的开 ... -
TextEditor原理分析笔记
2007-08-23 15:48 3406Editor的语法着色原理:Eclipse使用damage , ... -
最近的Eclipse开发总结
2007-08-23 15:46 2147java.lang.IllegalAccessError: t ...
相关推荐
2. 图形和图像处理:可以打印复杂的图形、条码和二维码,包括QR码和DataMatrix。 3. 自动介质感应:自动检测并设置标签尺寸,简化了操作流程。 4. 网络管理工具:通过ZebraNet Print Server,可以远程监控和管理...
原理图符号库是电路设计软件中表示该芯片的图形符号,用于绘制电路原理图;PCB封装库则包含芯片在PCB板上的实际物理尺寸和引脚布局,用于布局和布线。设计者可以将这些库导入到电路设计软件(如Altium Designer、...
本驱动程序专为Zebra的ZT210、ZT220及ZT230系列打印机设计,提供了全面的功能支持,以实现高质量的条形码、二维码以及其他标签打印。 1. **驱动程序安装** - `zd51166465-certified.exe` 是Zebra ZT230系列打印机...
ZT213/ZT213LEEA是一款专为低功耗应用设计的RS232多通道USB收发器和驱动器芯片,广泛应用于数据通信、工业控制、物联网设备等领域。本文将深入探讨其规格参数、功能特点、选型指南及应用实例,帮助读者全面了解这款...
### ZT213LEEA.PDF 知识点概览 #### 一、产品概述 **ZT213LEEA** 是一款由 Zywyn Corporation 生产的低功耗 RS232 通信接口芯片。该系列器件采用 +5V 供电,支持 EIA/TIA-232 和 V.28/V.24 通信标准,并具有较低的...
本设备经测试符合 FCC 规则第 15 章规定的 B 类数字设备的限制。这些限制专门用于在家庭环境下提供适当的有害干扰防护。本设备产生、使用并且会辐射射频能量。如果未根据说明进行安装和使用,则会对无线电通信产生...
ZT7548是一款第五代电容式触控屏幕控制器,支持30x18或18x30的通道配置,可以同时检测最多10个触点。该控制器能够与最多8个键与TSP(触控屏面板)或FPC(柔性印刷电路板)模式一起工作,在多点触控时无扫描率下降的...
"斑马zt410中文库"指的是为ZT410打印机特别设计的中文字符集和字体库,确保在打印中文标签时能够清晰、准确地输出汉字。 1. **斑马ZT410打印机特性** - 高性能:ZT410采用强大的32位处理器,提供快速打印速度,...
第2至12题可能逐渐增加难度,涵盖数组、字符串操作、函数的使用等。第15题可能涉及到类的使用,例如创建一个自定义类并实现其功能。而第18题可能是一个关于异常处理或者多线程的问题,这需要对Java的try-catch语句或...
ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机ZT410打印机IP地址设置网络打印机
#### 二、设计与功能 - **流线型设计**:ZT210采用了更为紧凑的设计,相比之前的Stripe和S4M型号,占用的空间更少。 - **用户友好**:操作人员几乎无需额外培训就能熟练使用,得益于其直观的操作界面和免工具维护...
"zt云流量HTML响应式模板"是一个专为网站设计的专业工具,它采用了现代网页设计的重要技术——HTML响应式布局。这种模板旨在为不同设备提供优化的用户体验,无论用户是在桌面电脑、平板还是智能手机上访问,都能呈现...
### zebra ZT400系列打印机技术手册 #### 知识点概述: 1. **版权及法律声明**:Zebra ZT400系列打印机技术手册的版权及相关软件固件的所有权归属ZIH Corp.及其许可证持有者,未经授权复制会受到法律制裁。 2. **...
斑马ZT510打印机驱动文件
斑马zt210是一款专为中国市场设计的工业条码打印机,非常适合不需要频繁更换标签的条码标签应用。这里给大家提供斑马zt210驱动下载,推荐有需要的用户下载安装。斑马zt210打印机优势:◆ 节省空间* 小巧紧凑和流线型...
在数字信号处理中,有三个重要的数学变换工具,即傅里叶变换(FT)、Z 变换(ZT)和离散傅里叶变换(DFT)。这些变换可以将信号和系统在时域空间和频域空间相互转换,方便了对信号和系统的分析和处理。 傅里叶变换...
斑马打印机ZT210是一款专业的工业级条形码和标签打印机,广泛应用于物流、零售、医疗等行业的标签制作。以下是对如何设置和使用斑马ZT210打印机的详细步骤: 首先,我们需要安装电脑驱动。双击下载好的驱动程序文件...
- **ZT230打印机控制面板显示屏**:ZT230配备了高级的图形显示屏,用户可以通过触摸屏访问设置菜单和其他功能。 - **在显示屏的各屏幕之间浏览**:用户可以使用控制面板上的导航键在不同的设置屏幕之间切换。 - *...
证通ZT598金属键盘设计坚固耐用,通常用于银行自助服务终端、ATM机、POS机以及各类安全认证设备。其采用金属材质,增加了物理防护性,能够有效防止恶意破坏和物理攻击。此外,键盘内部可能集成了加密芯片,确保数据...
赠送jar包:zt-exec-1.9.jar; 赠送原API文档:zt-exec-1.9-javadoc.jar; 赠送源代码:zt-exec-1.9-sources.jar; 赠送Maven依赖信息文件:zt-exec-1.9.pom; 包含翻译后的API文档:zt-exec-1.9-javadoc-API文档-...