最近做了一个项目,其中用到GEF做了一个做流程图的工具,老师有一个要求是:在进行优化的时候,关键路径上的线要改变成红色以突出显示,经多方面查阅资料,原来挻简单的,现总结如下
即要实现模型与视图的同步:
因为保存的是模型,而模型是与视图分开的,所以想要改变connection的颜
色,只需要改变模型,然后通过“事件通知机制”使得视图作相应改变。
方法:
1,在ArrowConnectionModel中增加如下代码:
public static final String criticalPath = "CRITICAL_PATH";
private boolean isCriticalPath = false;
public boolean isCriticalPath() {
return isCriticalPath;
}
public void setCriticalPath(boolean isCriticalPath) {
if(this.isCriticalPath == isCriticalPath)
return;
this.isCriticalPath = isCriticalPath;
firePropertyChange(criticalPath, null, null);
}
代码功能,如果它连接的两个Node都是关键路径上的点时( 即此connection在关键路径上,是需要改变颜色的)。
2,在CustomeAbstractConnectionEditPart中增加如下代码:
public void propertyChange(PropertyChangeEvent evt) {
if(evt.getPropertyName().equals(AbstractConnectionModel.P_BEND_POINT))
refreshBendpoints();
//TODO 得到要改变颜色的事件时,进行刷新
if(evt.getPropertyName().equals(ArrowConnectionModel.criticalPath)){
refreshConnection();
}
}
//TODO 刷新函数
public void refreshConnection(){
this.getConnectionFigure().setForegroundColor(new Color(null,255,0,0));
}
3,在相应的地方调用ArrowConnectionModel的setCriticalPath(boolean isCriticalPath)方法即可
主要的改变颜色的功能要在refreshConnection()方法中,其他的只是实现它的事件通知机制