读书人

GEF札记 转自qq123zhz

发布时间: 2012-12-25 16:18:29 作者: rapoo

GEF笔记 转自qq123zhz
此文章转自:http://zhenghuazhi.iteye.com/blog/890907

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

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具有撤销和回退功能。一组command由EditPolicy控制。

在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);

}



/**

* ????????
1 楼 qq123zhz 2011-03-21 我这篇其实没有传完。。。

读书人网 >编程

热点推荐