Get busy living or get busy dying!

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  1 随笔 :: 13 文章 :: 0 评论 :: 0 Trackbacks

2007年6月17日 #

刚刚看了几篇文档,对GEF中的POLICY的位置有了更清楚的理解。
POLICY有几种类型:NOTEPOLICY,COMPONENTPOLICY,LAYOUTPOLICY;分别对应REQUEST的几种类型,一旦出现REQUEST就在EDITPART里面找相应的POLICY,然后在POLICY中执行COMMAND。当然要给COMMAND传递一定的参数,比如MODEL,CONSTRAINT等等
调用POLICY的GETCOMMAND()函数,得到相应的一个或多个COMMAND,然后分别执行,这样就改变了MODEL。
最后在EDITPART里面添加监听器:
abstract public class EditPartWithListener extends AbstractGraphicalEditPart implements
        PropertyChangeListener 
{

      
public void activate() {
            
super.activate();
            
// It registers with a model by making self into listeners.
            ((AbstractModel) getModel()).addPropertyChangeListener(this);
          }


          
public void deactivate() {
            
super.deactivate();
            
// It deletes from a model.
            ((AbstractModel) getModel()).removePropertyChangeListener(this);
          }


}

然后,HelloEditPart 要派生自这个抽象类,然后在模型改变时刷新视图。注意这里用到了
前面设置的变量P_CONSTRAINT。通过这个变量我们才知道是要改变HelloModel 模型的约束.
public class HelloEditorPart extends EditPartWithListener {
public void propertyChange(PropertyChangeEvent event) {
        
// the model of change shows change of the position information on a model -- do thing or not?
        if (event.getPropertyName().equals(HelloModel.P_CONSTRAINT))
          refreshVisuals(); 
// A view is updated.
    }

}

这样就能改变VIEW了!
REQUEST-->POLICY-->COMMAND-->MODEL-->VIEW
^_^
posted @ 2007-06-17 21:56 一条辉 阅读(286) | 评论 (0)编辑 收藏

仅列出标题