导读:
图形编辑框架GEF有一个绘图和布局的插件叫Draw2D.Draw2D为GEF应用程序提供绘画和布局管理功能。本文集中探讨如何使用它去绘制一个简单的UML类图形。大多数应用程序使用GEF插件作为编辑层。
生成 Draw2d 图形
一个实例这篇文章的最终目的就是生成如下的一个图形,它是一个简单的UML类图:
设计图形
第一步就是要设计这个图形要由哪些组件组成。
在这个例子中,这个图形可以由三个子图形组成。(我们先设定这个图形叫UMLClassFigure)。它的第一个子图形: 一个Label 图形,它用来显示类的名称这个例子中为Table。第二个子图形是一个容器去装类的属性和方法。为这个目的,我们将设计一个图形称为Compartment图形。类和compartment图形都是使用ToolbarLayout布局去放置它们的子图形。如同所示:
创建 CompartmentFigure 类
CompartmentFigur是被用来装方法和属性的。这个类继承自org.eclipse.draw2d.Figure,使用ToolbarLayout布局。而且它使用自定义的边框。这个边框是很简单的顶部的黑色的1个象素,用来分隔其它的CompartmentFigures.它的代码如下:
public class CompartmentFigure extends Figure {
public CompartmentFigure() {
ToolbarLayout layout = new ToolbarLayout();
layout.setMinorAlignment(ToolbarLayout.ALIGN_TOPLEFT);
layout.setStretchMinorAxis(false);
layout.setSpacing(2);
setLayoutManager(layout);
setBorder(new CompartmentFigureBorder());
}
public class CompartmentFigureBorder extends AbstractBorder {
public Insets getInsets(IFigure figure) {
return new Insets(1,0,0,0);
}
public void paint(IFigure figure, Graphics graphics, Insets insets) {
graphics.drawLine(getPaintRectangle(figure, insets).getTopLeft(),
tempRect.getTopRight());
}
}
}
创建UMLClassFigure类
UMLClassFigure类和前面的类在很多地方都相似。它包括3个子图形------
两个CompartmentFigures分别装属性和方法,一个Draw2d Label显示类的名称。
它同样使用垂直的ToolbarLayout 布局来放置它的子图形。
UMLClassFigure使用Draw2d的Lineborder在它边上绘制一个边框。代码如下:
public class UMLClassFigure extends Figure {
public static Color classColor = new Color(null,255,255,206);
private CompartmentFigure attributeFigure = new CompartmentFigure();
private CompartmentFigure methodFigure = new CompartmentFigure();
public UMLClassFigure(Label name) {
ToolbarLayout layout = new ToolbarLayout();
setLayoutManager(layout);
setBorder(new LineBorder(ColorConstants.black,1));
setBackgroundColor(classColor);
setOpaque(true);
图形编辑框架GEF有一个绘图和布局的插件叫Draw2D.Draw2D为GEF应用程序提供绘画和布局管理功能。本文集中探讨如何使用它去绘制一个简单的UML类图形。大多数应用程序使用GEF插件作为编辑层。
生成 Draw2d 图形
一个实例这篇文章的最终目的就是生成如下的一个图形,它是一个简单的UML类图:
设计图形
第一步就是要设计这个图形要由哪些组件组成。
在这个例子中,这个图形可以由三个子图形组成。(我们先设定这个图形叫UMLClassFigure)。它的第一个子图形: 一个Label 图形,它用来显示类的名称这个例子中为Table。第二个子图形是一个容器去装类的属性和方法。为这个目的,我们将设计一个图形称为Compartment图形。类和compartment图形都是使用ToolbarLayout布局去放置它们的子图形。如同所示:
创建 CompartmentFigure 类
CompartmentFigur是被用来装方法和属性的。这个类继承自org.eclipse.draw2d.Figure,使用ToolbarLayout布局。而且它使用自定义的边框。这个边框是很简单的顶部的黑色的1个象素,用来分隔其它的CompartmentFigures.它的代码如下:
public class CompartmentFigure extends Figure {
public CompartmentFigure() {
ToolbarLayout layout = new ToolbarLayout();
layout.setMinorAlignment(ToolbarLayout.ALIGN_TOPLEFT);
layout.setStretchMinorAxis(false);
layout.setSpacing(2);
setLayoutManager(layout);
setBorder(new CompartmentFigureBorder());
}
public class CompartmentFigureBorder extends AbstractBorder {
public Insets getInsets(IFigure figure) {
return new Insets(1,0,0,0);
}
public void paint(IFigure figure, Graphics graphics, Insets insets) {
graphics.drawLine(getPaintRectangle(figure, insets).getTopLeft(),
tempRect.getTopRight());
}
}
}
创建UMLClassFigure类
UMLClassFigure类和前面的类在很多地方都相似。它包括3个子图形------
两个CompartmentFigures分别装属性和方法,一个Draw2d Label显示类的名称。
它同样使用垂直的ToolbarLayout 布局来放置它的子图形。
UMLClassFigure使用Draw2d的Lineborder在它边上绘制一个边框。代码如下:
public class UMLClassFigure extends Figure {
public static Color classColor = new Color(null,255,255,206);
private CompartmentFigure attributeFigure = new CompartmentFigure();
private CompartmentFigure methodFigure = new CompartmentFigure();
public UMLClassFigure(Label name) {
ToolbarLayout layout = new ToolbarLayout();
setLayoutManager(layout);
setBorder(new LineBorder(ColorConstants.black,1));
setBackgroundColor(classColor);
setOpaque(true);