Draw2d 教程(一) - 其他 - CSDN技术中心

来源:百度文库 编辑:神马文学网 时间:2024/04/20 23:42:22

本文主要译自《SWT/JFace inaction》附录C,并结合译者实践经验整理。译者认为讨论一点纯粹Draw2D的东西是有必要的,因为第一,并不是所有的应用都必须(或者适合)使用GEF;第二,Draw2D是GEF的基础,对Draw2D知之甚少的情况下学习GEF,往往学习曲线比较陡,因为其中哪些是Draw2D的概念,哪些是GEF的概念往往难以厘清。本文假设读者有SWT基础。

 

1、理解Draw2d
  Draw2d是SWT平台上的图形库,你可以用它定制属于自己的、不依赖于特定操作系统本地组件的上层组件;
也可以用它开发基于图形的应用程序。一般来说,基础代码编写者/GUI组件提供者们使用前一个功能,像译
者这样开发应用程序的人则使用后者更多一些。
  Draw2d库依赖于SWT(不依赖JFace),提供了完整的图形应用程序开发包,使用它你几乎可以作出任意的
图形,但是除了简单的几何图形以外,任何图形都需要开发者自己手绘、或者用已有的图形进行组合;同时,
如果你想让你的图形响应各种事件(鼠标/键盘/拖拽等),也必须事事躬亲,显然自由的代价就是繁冗的代码
:( 。
  本文从Draw2d的核心类及其方法讲起,然后理论结合实践,以一个flowchart(程序流程图)为例子进行实
战演习,同时会讲到拖拽(drag-and-drop, 简写作dnd),以及如何使用Connector对象连接两个图形等。

  1.1、使用Draw2d基础类
    Draw2d在设计结构上有些类似SWT:两者使用某些共同的类(确切说是Draw2d使用SWT的类);描绘(drawing)、
  事件处理和组件的布局等机制都有相似的结构,对应如表C.1。实际上,所有的Draw2d GUI必须都放在某个
  SWT Canvas上。Draw2d和SWT的第一个区别是:在SWT中,一个Canvas用一个GC对象来提供绘图功能,但在
  Draw2d中Canvas使用名为LightweightSystem的对象。
    
 表C.1

    LightweightSystem好比SWT中的Display,没有具体的形状,但是提供事件处理机制以及负责与外部环境
  通信。正如它的名字,LightweightSystem不依赖于特定操作系统,这意味着你失去了SWT/Jface重量级组件
  的优势,比如快速的响应和本地外观风格,但你得到的,是对自己的组件的外观与行为的完全控制。
    毫无疑问,Draw2d中最重要的类是Figure,你会看到,我们讲Draw2d,大部分是在讲它的方法以及子类。
  就像SWT的组件都要放到一个Shell上一样,Figure必须放到LightweightSystem上以便显示。如同SWT的Control
  一样,Figure可以调整大小和位置,添加Listeners和LayoutManagers,以及设置颜色和字体。同时,一个Figure
  又相当于SWT中的一个Composite,可以在其上添加其他的Figure,即作为其他Figure的容器。见图C.1。

 图C.1

    然而,不同于Control和Widget的是,你可以随心所欲地继承Figure。Figure的图形可以绘制(drawing)
  也可以使用图片。Figure不仅可以使用单独的Listener接口,而且可以自己处理大部分事件;甚至可以发起某
  些事件来唤醒GUI中的其他对象。
    为了向Figure中加入图片或者进行手绘,你需要用到Graphics对象。他就像SWT中的GC一样,提供了在一个给
  定区域画图的方法。Graphics类的很多方法和GC的完全一样,尤其是绘制线和几何图形、显示图片以及字体等方
  面。但Graphics还提供了一个不同于GC的功能:它的对象可以在LightweightSystem中移动。这意味着当你想要
  改变一个图形组件的位置时,Draw2d提供了它自己的拖拽机制来将一个Figure移动到合适的位置。

  1.2、Flowchart应用实例
    我们的应用实例是一个程序流程图,如图C.2所示。

     图C.2


    
    Draw2d包含很多类和功能,在此无法一一详述,所以我们将只关注最主要的东西:即前面提到的Figure及其
  子类。
 

您认为本文应该得       打印|收藏|讨论|投诉b9194278-f428-43f6-8a49-5c70f2fcca9d

只是我的一个指针。

作者其他文章:更多
  • Draw2D教程(六)
  • Draw2D 教程(五)
  • Draw2D 教程(四)
  • Draw2D 教程(三)
  • Draw2D教程(二)