首先在这里说几个东西:1.Layer层无边界的。 2.Pane窗格有边界的容器。
IFigure在draw2d中的位置,已经draw2d这套架构的机制咱不在这里详述。记得第一次接触这个,找到最多的就是draw2d的机制的文章。当然IFigure的文章也多,但是为了更好的学习Figure,还是写一篇这样的文章,部分内容来自网上。
IFigure:这个接口里面定义了很多东西,但是主要分为四个部分:1.维护父子关系。2.添加事件监听器。3.画界面的方法。4.管理界面的方法。这里只是列举一些觉得有用的跟界面相关的方法,其他的用的时候再分析。
add(IFigure figure, Object constraint):在IFigure中有四个添加子的重载方法,其中这一个传入的第二个参数是object对象。这里所说的constraint(约束)主要是跟布局息息相关的,它可以是形状,也可以是特点布局管理器中指定的参数。
boolean containsPoint(Point p):判断点是否在当前区域内。
void erase():一个擦除当前IFigure的方法,重画前常调用。
findFigureAt(Point p):找当前点下的IFigure,有3个重载方法,可以选择遍历方式。findFigureAtExcluding与之相反。
getMaximumSize,getMinimumSize,getPreferredSize:等都是布局管理器中常用到的方法。
void paint(Graphics graphics):这个方法是IFigure 提供的GC接口,用这个方法画当前IFigure 的形状,很嗨皮的这方法。
repaint():重绘。
IFigure下的子接口:
Connection:这是一个线的基础接口,主要做三件事:1.获取源和目标的锚点。2.存储PointList线上的点。3.设定路由方式。
FreeformFigure:所有实现此接口的figure都具备向四周延伸的能力,但是此种figure必须放在FreeformViewport类似容器里面。
IImageFigure:一个有图片的figure
IScrollableFigure:一个带有ScrollPane的figure,从效果上来说,此figure拥有一个属于自己的侧滑条。
Orientable:简单接口,描述HORIZONTAL和VERTICAL相关
RotatableDecoration:此接口提供两个方法:1.setLocation设置旋转的点 2.setReferencePoint设置旋转的角度
ScalableFigure:一个提供可缩放功能的接口,gef编辑器中实现的ZoomManeger功能还不错。
IFigure的实现类:
Figure:几乎每一个Figure里面都有一个Helper,牛叉的是Figure的Helper叫这个AncestorHelper注定牛叉,Helper主要是对事件的管理。
erase():这个方法是擦除当前Figure,擦除自己的同时必须重画父容器,因为父有可能改变。
repaint(Rectangle rect):重画方法会调用UpdateManager对象的addDirtyRegion方法类似一个注册为脏的意思。
另外看看figure的paint方法:画图其实就是一个基本功,这里其实人家给出了一个很清晰的画图的思路。
public void paint(Graphics graphics) {
if (getLocalBackgroundColor() != null)
graphics.setBackgroundColor(getLocalBackgroundColor());
if (getLocalForegroundColor() != null)
graphics.setForegroundColor(getLocalForegroundColor());
if (font != null)
graphics.setFont(font);
graphics.pushState();
try {
paintFigure(graphics);
graphics.restoreState();
paintClientArea(graphics);
paintBorder(graphics);
} finally {
graphics.popState();
}
}
DrawerFigure:gef中的palette面板上的分组的那个Figure,点击能够像抽屉一样动的Figure。
FlowFigure:FlowFigure和它的子,都是用于描述文本的Figure。
Shape:Shape和它的子是用于描述图形的,它默认提供了几个基本的图形,RectangleFigure(矩形)和Ellipse(椭圆),RoundedRectangle(圆角矩形),PolylineShape(折线),PolygonShape(多边形),Polyline(线)。
如果对默认提供的Figure用起来不满意,可以使用GC画:
一般我们的Figure都是继承Figure或者它的孩子,所以我们优先可以考虑覆盖paintFigure,paintClientArea
,paintBorder这些方法。
工具方法:
FigureUtilities:这个工具类,可以转换颜色,转换一个高亮的和一个暗的。还可以获取文本的宽度。制造阴影的方法:makeGhostShape()