`

IFigure

 
阅读更多

首先在这里说几个东西: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()

分享到:
评论

相关推荐

    用gef写的一个tree例子(无移动,删除)

    - 实现`IFigure`和`IFigurePart`接口,以定义树节点的外观和行为。 - 使用`EditPolicy`定义节点的操作,如添加、删除等。在这个例子中,由于不包含移动和删除功能,可能只实现了基本的显示和选择操作。 - 创建一个`...

    关于Draw2D里的Layout.doc

    `XYLayout`的`layout(IFigure parent)`方法执行如下操作: 1. 遍历父级图形的所有子图形。 2. 获取每个子图形的约束矩形。 3. 如果约束矩形的宽度或高度为-1,表示尺寸未指定,将使用`getPreferredSize()`方法计算...

    draw2d_Demo_code

    在代码中,我们可能会看到`IFigure`接口的实现,它是Draw2D中所有图形对象的基类。 2. **布局管理器**:在`Draw2DLayoutExample.java`中,布局管理器如`GridLayout`或`FlowLayout`被用来组织和调整图形对象的位置。...

    draw2d精讲

    Draw2d是SWT的轻量级组件系统,Draw2d的实例由SWT组件、LightweightSystem和Draw2d的IFigure实例集合组成。

    drawjs:eclipse draw2d的端口

    []梳理draw2d的Java类继承关系1.1 [x]放置IFigure类图1.2 [x]放置EventDispatcher类图1.2.1 [] SWTEventDispatcher类图(实现)1.3 [x]替换UpdateManager类图1.3.1 [] DeferredUpdateManager类图(实现)1.4 [x]...

    按名称调用图形,使用滚轮缩放等:按名称而不是手柄引用图形,还包括滚轮缩放、平移、持久图形位置和大小等-matlab开发

    按名称而不是句柄引用图形,还包括滚轮缩放和平移...fHandle = iFigure('My Figure', 'zoom') 会将图形打开到它之前的位置,并使用基于滚轮的缩放和平移。 一些键盘键将允许多子图图像的同步缩放(在 x、y 或两者中)。

Global site tag (gtag.js) - Google Analytics