控制器设计
通用模型
我们可以简单抽取一个控制器通用模型,实现监听器的注册和注销,其它控制器继承该控制器。
public class AbstractEditPart extends AbstractGraphicalEditPart
implements PropertyChangeListener{
//@Override
public void activate(){
super.activate();
((AbstractNode)getModel()).addPropertyChangeListener(this);
//System.out.println("activate");
}
//@Override
public void deactivate(){
super.deactivate();
((AbstractNode)getModel()).removePropertyChange(this);
//System.out.println("deactivate");
}
//@Override
protected IFigure createFigure() {
// TODO Auto-generated method stub
return null;
}
//@Override
protected void createEditPolicies() {
// TODO Auto-generated method stub
}
public void propertyChange(PropertyChangeEvent evt) {
// TODO Auto-generated method stub
}
}
表格控制器设计
表格的控制器虽然比较复杂,但是也理解其机制,也不是特别复杂。重要的是要考虑表格中含有子元素,所以要注意:供子元素列表获取;子元素画板获取;素发生变化时,在刷新视图的显示、刷新子元素列表;安装相应的策略等。
public class FormTableEditPart extends AbstractEditPart{
protected IFigure createFigure() {
return new TableFigure((TableNode)getModel());
}
public void refreshVisuals(){
Rectangle constraint = ((TableNode)getModel()).getConstraint();
if(constraint.width==-1 || constraint.height == -1){
constraint.width= ((TableNode)getModel()).getGrid().numColumns * 20+2;//((TableNode)getModel()).getWidthHint()
constraint.height=((TableNode)getModel()).getHeightHint()*2+2;
((TableNode)getModel()).setConstraint(constraint);
}
((GraphicalEditPart)getParent()).setLayoutConstraint(this, getFigure(), constraint);
}
public List getModelChildren(){
return ((TableNode)getModel()).getChildren();
}
public void createEditPolicies(){
installEditPolicy(EditPolicy.CONTAINER_ROLE,new ContainerLayoutEditPolicy());
installEditPolicy(EditPolicy.COMPONENT_ROLE,new FormDeleteEditPolicy());
}
public IFigure getContentPane(){
return ((TableFigure)getFigure()).getContainerFigure();
}
public void propertyChange(PropertyChangeEvent event){
String prop=event.getPropertyName();
if(TableNode.P_CHILDREN.equals(prop)){
this.refreshChildren();
this.refreshVisuals();
}else if(prop.equals(TableNode.P_CONSTRAINT)){
refreshVisuals();
}else if(prop.equals(TableNode.P_CHILDCHANGE)){
refreshVisuals();
}else if(prop.equals(TableNode.P_GRIDMANAGER)){
String delta=(String)event.getNewValue();
test(delta);
TableNode table=(TableNode)getModel();
Rectangle cons=TableTool.getTableConstraint(table);
table.setConstraint(cons);
}else if(prop.equals(TableNode.P_TABLEBGCOLOR)){
getFigure().setBackgroundColor(((TableNode)getModel()).getBgColor());
}
super.propertyChange(event);
}
public void test(String delta){
List list=this.getChildren();
IFigure parent=getContentPane();
String type=delta.split(":")[0];
int chgValue=Integer.parseInt(delta.split(":")[1]);
GridLayout layout=((TableNode)getModel()).getGrid();
for(int i=0;i<list.size();i++){
CellEditPart part=(CellEditPart)list.get(i);
GridData gridData=((CellNode)part.getModel()).getGridData();
if("vspace".equalsIgnoreCase(type)){
if(gridData.verticalSpan >1){
gridData.heightHint+=(gridData.verticalSpan-1)*chgValue;
}
}else if("hspace".equalsIgnoreCase(type)){
if(gridData.horizontalSpan >1){
gridData.widthHint+=(gridData.horizontalSpan-1)*chgValue;
}
}else{
}
layout.setConstraint(part.getFigure(), gridData);
}
}
}
其它控制器
其它控制器类似。
至此,控制器业基本完成。
分享到:
相关推荐
本文旨在利用Eclipse平台上的GEF(Graphic Editor Framework)框架,设计并实现一个SVG的可视化制作工具,以解决SVG源码编辑的问题。GEF是一种用于构建图形编辑器的强大的框架,它基于Model-View-Controller(MVC)...
1. **模型-视图-控制器(MVC)**:GEF基于MVC设计模式,模型存储图形数据,视图负责显示,控制器处理用户交互。 2. **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联起来,处理用户交互和...
创建GEF编辑器时,通常会在Eclipse中创建一个控制器(EditorPart),设定控制器的输入(IEditorInput),并初始化EditDomain、viewers和palette等核心组件。GEF的这一结构确保了各部分之间的低耦合,提高了系统的可...
GEF遵循经典的MVC(Model-View-Control)架构,这一设计模式使得模型、视图和控制器各司其职,减少了各组件间的耦合度,提高了系统的可维护性和灵活性。 #### 二、GEF的关键组件解析 1. **模型(Model)**:模型是...
Gef框架的使用通常涉及固件开发、系统初始化以及低级硬件控制,尤其在嵌入式系统和服务器领域应用广泛。 在“简单gef框架”这个主题中,我们可以理解为这是一个基于gef技术构建的简化流程设计项目。流程设计是软件...
在本实例中,我们将探讨如何利用GEF实现一个简单的MVC(Model-View-Controller)架构,这是一种常见的软件设计模式,用于分离应用程序的数据、显示逻辑和用户交互。 1. **GEF框架基础**: - **模型(Model)**:...
GEF是Eclipse生态系统的一部分,利用Eclipse的插件体系,开发者可以通过编写插件来扩展其功能,创建定制化的图形编辑器。 **插件开发** 在Eclipse中至关重要,因为它是实现功能扩展的主要方式。GEF插件开发涉及创建...
- **模型-视图-控制器(MVC)**:理解GEF如何实现MVC设计模式,以及如何将数据模型与图形视图绑定。 - **事件处理**:学习如何监听和响应用户交互,如点击、拖放、键盘输入等。 - **撤销/重做(Undo/Redo)**:了解...
1. **模型视图控制器(MVC)架构**:GEF 3.10采用MVC设计模式,将模型、视图和控制器分离,提高了代码的可维护性和可重用性。 2. **图元工厂(Figure Factory)**:提供了丰富的图元资源,用于创建图形元素,如线条...
### GEF开发指南——插件开发关键知识点解析 #### 一、概述 ...通过阅读本书,读者不仅能够了解GEF的基本原理,还能掌握如何利用GEF构建复杂的图形编辑器。对于初学者来说,这本书是一本很好的入门指南。
此外,GEF框架还充分利用了诸如MVC(Model-View-Controller)架构等经典设计模式,确保了代码的清晰性和可维护性。 #### GEF入门挑战与策略 面对GEF框架的学习门槛,正确的学习策略至关重要。作者在“八进制”Blog...
1. **GEF架构**:GEF的核心架构包括模型(Model)、视图(View)和控制器(Controller)三部分,遵循Model-View-Controller(MVC)设计模式,确保了良好的代码组织和可维护性。 2. **Zest图表库**:GEF通常与Zest...
GEF的核心概念包括模型(Model)、视图(View)和控制器(Controller)。模型是数据结构,负责存储和处理数据;视图则将模型的数据可视化,展示给用户;控制器则是模型和视图之间的桥梁,处理用户的交互操作。此外,...
它为开发者提供了一套全面的工具,用于创建复杂的图形用户界面,特别适用于创建数据建模、流程设计、系统架构等领域的可视化编辑器。GEF主要基于SWT/JFace技术,提供了丰富的图形绘制、事件处理、模型与视图同步等...
- **模型-视图-控制器(MVC)**:GEF基于经典的MVC设计模式,其中模型负责存储数据,视图负责显示数据,而控制器则处理用户交互。 - **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联...
它提供了一套强大的工具和API,使得开发者能够快速、便捷地创建出复杂的图形用户界面,特别适合于创建数据建模、流程设计、系统配置等领域的应用程序。 "GEF_Tutorial.pdf"很可能是GEF的基础教程,涵盖了GEF的基本...
在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...
1. **GEF架构**:理解并掌握模型-视图-控制器的设计模式,以及编辑领域的概念。 2. **图形元素操作**:学习如何创建、删除、移动和修改图形元素,包括连接线和节点。 3. **交互处理**:了解GEF如何处理用户的鼠标和...
学习如何利用Eclipse的调试工具进行GEF应用的调试,以及编写测试用例验证功能的正确性。 10. **扩展性与可定制性** GEF的开放性和模块化设计使其具有高度的可扩展性和可定制性。开发者可以根据需求添加新的模型...