年底发表一点对GEF的感觉

GEF 是图形编辑框架,它实现允许开发人员以图形化的方式展示和编辑模型,提升用户体验。它提供标准的MVC结构,但是和webMVC框架略有不同。

1、模型:模型只与控制器打交道,模型改变时触发相应的事件给控制器,控制器负责通知视图更新。典型的模型包含PropertyChangeSupport类型的成员变量,用来维护监听器成员即控制器。

public abstract class AbstractMode implements Cloneable, Serializable {

       private static final long serialVersionUID = 7796529230959678337L;

       PropertyChangeSupport listeners = new PropertyChangeSupport(this);

 

       public void addPropertyChangeListener(PropertyChangeListener l) {

              listeners.addPropertyChangeListener(l);

       }

 

       public void firePropertyChange(String prop, Object oldValue, Object newValue) {

              listeners.firePropertyChange(prop, oldValue, newValue);

       }

 

       public void fireStructureChange(String prop, Object child) {

              listeners.firePropertyChange(prop, null, child);

       }

 

       public void removePropertyChangeListener(PropertyChangeListener l) {

              listeners.removePropertyChangeListener(l);

       }

}

2、控制器:EditPart对象,所有的EditPart共同组成了GEF的控制器这部分,每个模型对应一个EditPart。你的应用中需要一个EditPartFactory对象复制控制给定模型对象创建对应的EditPart对象,这个工厂类将被视图利用。

EditPart控制实现,而实现的具体操作GEF交给了command,每个command做自己应该执行的操作,比如创建,移动,删除等,command都放在EditDomain堆栈里,每个command具有撤销和回退功能。一组commandEditPolicy控制。

EditPolicy里可以控制可编辑的图元的handler句柄,创建自定义的Handler,自定义的图元的结构。

public class MainModeEditPart extends AbstractGraphicalEditPart implements

              PropertyChangeListener {

       private GefLayoutEditpolicy gefLayoutEditpolicy = new GefLayoutEditpolicy();

 

       private ModeDirectEditManager manager;

 

       // IEditorInput input = (IEditorInput) PlatformUI.getWorkbench()

       // .getActiveWorkbenchWindow().getActivePage().getActiveEditor().getEditorInput();

 

       // DiagramEditor editor = (DiagramEditor) PlatformUI.getWorkbench()

       // .getActiveWorkbenchWindow().getActivePage().getActiveEditor();

 

       protected List getModelChildren() {

              PeopleActivePropertyDialog.modelArray = ((MainMode) getModel())

                            .getModes();

              ChooseActivityDialog.modelArray2 = (ArrayList) ((MainMode) getModel())

                            .getModes();

              return ((MainMode) getModel()).getModes();

       }

 

       // @Override

       // public IFigure getContentPane() {

       // return ((MainFigure) getFigure()).getAttributeFigure();

       // }

       public void activate() {

              super.activate();

              ((MainMode) getModel()).addPropertyChangeListener(this);

       }

 

       /**

        * ˢ�¡äӶԻ��

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值