首先在这里说几个东西: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()
分享到:
相关推荐
- 实现`IFigure`和`IFigurePart`接口,以定义树节点的外观和行为。 - 使用`EditPolicy`定义节点的操作,如添加、删除等。在这个例子中,由于不包含移动和删除功能,可能只实现了基本的显示和选择操作。 - 创建一个`...
`XYLayout`的`layout(IFigure parent)`方法执行如下操作: 1. 遍历父级图形的所有子图形。 2. 获取每个子图形的约束矩形。 3. 如果约束矩形的宽度或高度为-1,表示尺寸未指定,将使用`getPreferredSize()`方法计算...
在代码中,我们可能会看到`IFigure`接口的实现,它是Draw2D中所有图形对象的基类。 2. **布局管理器**:在`Draw2DLayoutExample.java`中,布局管理器如`GridLayout`或`FlowLayout`被用来组织和调整图形对象的位置。...
Draw2d是SWT的轻量级组件系统,Draw2d的实例由SWT组件、LightweightSystem和Draw2d的IFigure实例集合组成。
[]梳理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]...
按名称而不是句柄引用图形,还包括滚轮缩放和平移...fHandle = iFigure('My Figure', 'zoom') 会将图形打开到它之前的位置,并使用基于滚轮的缩放和平移。 一些键盘键将允许多子图图像的同步缩放(在 x、y 或两者中)。