[b]From:http://www.blog.edu.cn/user1/19180/archives/2005/375038.shtml[/b]3.1 概述
Draw2D是一个轻量级图形组件工具包,这些组件称为Figure。所谓轻量级系统,就是说Draw2D的组件与操作系统中的图形系统没有对应关系,Draw2D对象不过是一个普通的Java对象。Figure可以通过一种父子关系组合起来。每一个Figure都有一个边界(Bounds),它的子女必须都在这个边界中,而布局管理器用来管理子女的位置。一般来说,子女的位置会根据边界而变化,但是对于线状图元,它的边界会根据子女的位置和自己的形状发生变化。
一个轻量级系统将一个Figure和一个SWT画布(Canvas)相关联,它的EventDispatcher监听大部分SWT的事件,并将这些事件传递给相应的Figure。对于Paint消息,轻量级系统将它传递给UpdateManager,这个UpdateManager将负责重新验证Figure和它子女的位置。
3.2 Draw2D的基本概念
Draw2D是一个很有用的工具包,它借用Java AWT窗口系统的基本思想(主要是布局的概念)进行绘图,同时提供丰富的概念,用于解决绘图过程中的遇到的问题。总体来说,Draw2D就是希望将绘图自动化,这也使得Draw2D在设计各种eclipse工具中扮演着极其重要的地位。Draw2D和GEF没有绝对联系,Draw2D可以独立于GEF存在并使用,因为它只和SWT相关。
Draw2D的问题可以写很多,这里只介绍基本的概念和思想。
3.2.1 Figure Draw2D最重要一个概念就是Figure,它可以看作是所有Draw2D图元的基类,事实上所有的Draw2D图元都继承自IFigure接口。所有Draw2D图元的都是Figure,不论是块状元素还是线状元素。
Figure类是一个IFigure接口的基本实现,可以用它描述一个区域(矩形或者线形)。Shape类继承自Figure类,它的子类实现了很多基本图形的功能,这包括Ellipse、Polyline、RectangleFigure、RoundedRectangle、Triangle。Figure类的其他子类中,还有一些比较常用的(对于绘图来说),比如Label、Layer、Panel。
3.2.2 Layout LayoutManager是布局的接口,它负责定位Figure子女的位置。
XYLayout和FreeformLayout相当于绝对布局,使用这种布局的Figure,它的子女位置可以自由分布。
ToolbarLayout是工具栏布局,使用这个布局的Figure,它的子女按照水平或者垂直的方式排布。
FlowLayout是流布局,使用这个布局的Figure,它的子女首先会尽量水平排布,如果排不下了,则进行垂直排布。
Draw2D中还提供了其他的布局,这里不再一一进行介绍。关于布局的话题,以后有时间再研究。
3.2.3 Anchor和Router Anchor是用来定位连接线端点的对象。
ChopboxAnchor将锚点设为矩形的中心,连接线的端点将定位到矩形的边界上。EllipseAnchor将锚点定位到椭圆形的中心上,连接线的端点将定位到椭圆形的边界上。XYAnchor则用来描述独立的锚点。
Router用来负责计算连接线的中间点,根据不同的方案,折线的中间点将计算为不同的位置。
3.2.4 Locator Locator用来定位Figure的位置,和Anchor不同,Locator的不是处理线端,而是处理Figure。
ConnectionEndpointLocator用来描述Figure和线端的位置。
Draw2D是一个轻量级图形组件工具包,这些组件称为Figure。所谓轻量级系统,就是说Draw2D的组件与操作系统中的图形系统没有对应关系,Draw2D对象不过是一个普通的Java对象。Figure可以通过一种父子关系组合起来。每一个Figure都有一个边界(Bounds),它的子女必须都在这个边界中,而布局管理器用来管理子女的位置。一般来说,子女的位置会根据边界而变化,但是对于线状图元,它的边界会根据子女的位置和自己的形状发生变化。
一个轻量级系统将一个Figure和一个SWT画布(Canvas)相关联,它的EventDispatcher监听大部分SWT的事件,并将这些事件传递给相应的Figure。对于Paint消息,轻量级系统将它传递给UpdateManager,这个UpdateManager将负责重新验证Figure和它子女的位置。
3.2 Draw2D的基本概念
Draw2D是一个很有用的工具包,它借用Java AWT窗口系统的基本思想(主要是布局的概念)进行绘图,同时提供丰富的概念,用于解决绘图过程中的遇到的问题。总体来说,Draw2D就是希望将绘图自动化,这也使得Draw2D在设计各种eclipse工具中扮演着极其重要的地位。Draw2D和GEF没有绝对联系,Draw2D可以独立于GEF存在并使用,因为它只和SWT相关。
Draw2D的问题可以写很多,这里只介绍基本的概念和思想。
3.2.1 Figure Draw2D最重要一个概念就是Figure,它可以看作是所有Draw2D图元的基类,事实上所有的Draw2D图元都继承自IFigure接口。所有Draw2D图元的都是Figure,不论是块状元素还是线状元素。
Figure类是一个IFigure接口的基本实现,可以用它描述一个区域(矩形或者线形)。Shape类继承自Figure类,它的子类实现了很多基本图形的功能,这包括Ellipse、Polyline、RectangleFigure、RoundedRectangle、Triangle。Figure类的其他子类中,还有一些比较常用的(对于绘图来说),比如Label、Layer、Panel。
3.2.2 Layout LayoutManager是布局的接口,它负责定位Figure子女的位置。
XYLayout和FreeformLayout相当于绝对布局,使用这种布局的Figure,它的子女位置可以自由分布。
ToolbarLayout是工具栏布局,使用这个布局的Figure,它的子女按照水平或者垂直的方式排布。
FlowLayout是流布局,使用这个布局的Figure,它的子女首先会尽量水平排布,如果排不下了,则进行垂直排布。
Draw2D中还提供了其他的布局,这里不再一一进行介绍。关于布局的话题,以后有时间再研究。
3.2.3 Anchor和Router Anchor是用来定位连接线端点的对象。
ChopboxAnchor将锚点设为矩形的中心,连接线的端点将定位到矩形的边界上。EllipseAnchor将锚点定位到椭圆形的中心上,连接线的端点将定位到椭圆形的边界上。XYAnchor则用来描述独立的锚点。
Router用来负责计算连接线的中间点,根据不同的方案,折线的中间点将计算为不同的位置。
3.2.4 Locator Locator用来定位Figure的位置,和Anchor不同,Locator的不是处理线端,而是处理Figure。
ConnectionEndpointLocator用来描述Figure和线端的位置。