一. 目标
在2个不同Table的2个Column间能建立Connection
二. 书写Connection模型
public class ColumnConnectionModel extends BaseModel {
private TableColumnModel target;
private TableColumnModel source;、
public void setTarget(TableColumnModel target) {
this.target = target;
target.addTarget(this);
}
public void setSource(TableColumnModel source) {
this.source = source;
source.addSource(this);
}
三. 修改TableColumn模型
必须修改与Connection相关的其他模型。
public class TableColumnModel extends BaseModel {
private List<ColumnConnectionModel> sources = new ArrayList<ColumnConnectionModel>();
private List<ColumnConnectionModel> targets = new ArrayList<ColumnConnectionModel>();
public void addSource(ColumnConnectionModel source) {
this.sources.add(source);
this.firePropertyChange(IPropertyConst.SOURCE_CONNECTION, null, null);
}
public void addTarget(ColumnConnectionModel target) {
this.targets.add(target);
this.firePropertyChange(IPropertyConst.TARGET_CONNECTION, null, null);
}
四. 书写Connection的EditPart
public abstract class BaseConnectionEditPart extends AbstractConnectionEditPart implements
PropertyChangeListener {
public class ColumnConnectionEditPart extends BaseConnectionEditPart {
@Override
protected void createEditPolicies() {
installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new ConnectionEndpointEditPolicy());
}
@Override
protected IFigure createFigure() {
PolylineConnection connection = new PolylineConnection();
connection.setTargetDecoration(new PolygonDecoration());
connection.setSourceDecoration(new PolylineDecoration());
connection.setForegroundColor(ColorConstants.blue);
return connection;
}
}
注意:
- 先做了一个Connection的基础类,方便以后使用
- 由于Connection的特殊性,需要继承于AbstractConnectionEditPart
- 在ConnectionEditPart中注册了一个ConnectionEndpointEditPolicy
- connection.setTargetDecoration(new PolygonDecoration()) 设定目标的箭头:--|>
- connection.setSourceDecoration(new PolylineDecoration()) 设定起源的箭头:-->
五. 启动
六. 总结
- 添加Connection的Model
- 修改和Connection相关的Model
- Connection的EditPart需要继承于AbstractConnectionEditPart
- 了解TargetDecoration和SourceDecoration
- 区分PolygonDecoration和PolylineDecoration的样式区别