WEB开发网
开发学院软件开发Java GEF实践总结(二)常见基础性问题 阅读

GEF实践总结(二)常见基础性问题

 2009-09-06 00:00:00 来源:WEB开发网   
核心提示: 上面的这段代码,说明了,GEF实践总结(二)常见基础性问题(3),当被监听者(model)的属性改变的时候,EditPart得知属性改变后做了什么事情,Command改变model,从而影响界面,如果是添加或删除了孩子模型(Children),那么就是刷新所有小孩

上面的这段代码,说明了,当被监听者(model)的属性改变的时候,EditPart得知属性改变后做了什么事情。如果是添加或删除了孩子模型(Children),那么就是刷新所有小孩,重新绘制他们。其他的属性改变的时候,就把自己刷新一下(当然refreshVisuals中还有更多的逻辑)。

六. Model如何告诉Figure具体绘图的位置?

Java代码   

/** 
* @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() 
*/ 
protected void refreshVisuals() { 
BaseModel model = (BaseModel) getModel(); 
Rectangle bounds = new Rectangle(model.getX(), model.getY(), model.getW(), model.getY()); 
((GraphicalEditPart) getParent()).setLayoutConstraint(this, getFigure(), bounds); 
} 
 

上面的代码在EditPart中,当属性改变时候,就告诉父EditPart,重新调整当前的位置,当然,新的位置信息来自于model。

注意:上面这段代码用于XYLayout的情况下,如果是GridLayout,需要传递GridData对象。其他的Layout也会有其他不同的参数传递和处理。

七. Model如果是父子结构的,EditPart如何知道呢?

Java代码

/** 
* @see org.eclipse.gef.editparts.AbstractEditPart#getModelChildren() 
*/ 
protected List<BaseModel> getModelChildren() { 
return ((BaseContainerModel) this.getModel()).getChilds(); 
}

就在于上面的代码,如果model有小孩,就将所有的model的小孩返回,那么EditPart就能知道当前的model是否是父子架构的了。

八. 总结

通过上面的内容已经能够明白:model->EditPart->Figure 的属性变化的传递和如何响应。这其实是GEF中模型变化影响UI界面的一条途径。

还有另一条途径就是通过界面操作,产生Request,通过EditPart的EditPolicy生成Command,Command改变model,从而影响界面。这第二条路以后会提到。

上一页  1 2 3 

Tags:GEF 实践 总结

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接