`
nuoda
  • 浏览: 50676 次
  • 来自: 深圳
社区版块
存档分类
最新评论

利用GEF制作表格系统(控制器设计)

阅读更多

控制器设计

通用模型

我们可以简单抽取一个控制器通用模型,实现监听器的注册和注销,其它控制器继承该控制器。

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

             }

 

      }

     

}

其它控制器

其它控制器类似。

 

至此,控制器业基本完成。

分享到:
评论
1 楼 workflow 2008-10-09  
不知你的CellOperateAction在那里?

相关推荐

    基于GEF框架的SVG制作工具设计与实现

    本文旨在利用Eclipse平台上的GEF(Graphic Editor Framework)框架,设计并实现一个SVG的可视化制作工具,以解决SVG源码编辑的问题。GEF是一种用于构建图形编辑器的强大的框架,它基于Model-View-Controller(MVC)...

    界面设计GEF应用实例

    1. **模型-视图-控制器(MVC)**:GEF基于MVC设计模式,模型存储图形数据,视图负责显示,控制器处理用户交互。 2. **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联起来,处理用户交互和...

    GEF 入门操作

    创建GEF编辑器时,通常会在Eclipse中创建一个控制器(EditorPart),设定控制器的输入(IEditorInput),并初始化EditDomain、viewers和palette等核心组件。GEF的这一结构确保了各部分之间的低耦合,提高了系统的可...

    Eclipse的GEF学习

    GEF遵循经典的MVC(Model-View-Control)架构,这一设计模式使得模型、视图和控制器各司其职,减少了各组件间的耦合度,提高了系统的可维护性和灵活性。 #### 二、GEF的关键组件解析 1. **模型(Model)**:模型是...

    简单gef框架

    Gef框架的使用通常涉及固件开发、系统初始化以及低级硬件控制,尤其在嵌入式系统和服务器领域应用广泛。 在“简单gef框架”这个主题中,我们可以理解为这是一个基于gef技术构建的简化流程设计项目。流程设计是软件...

    java gef开发实例

    在本实例中,我们将探讨如何利用GEF实现一个简单的MVC(Model-View-Controller)架构,这是一种常见的软件设计模式,用于分离应用程序的数据、显示逻辑和用户交互。 1. **GEF框架基础**: - **模型(Model)**:...

    GEF入门必读 GEF入门系列 GEF-whole-upload

    GEF是Eclipse生态系统的一部分,利用Eclipse的插件体系,开发者可以通过编写插件来扩展其功能,创建定制化的图形编辑器。 **插件开发** 在Eclipse中至关重要,因为它是实现功能扩展的主要方式。GEF插件开发涉及创建...

    GEF Example Source Code

    - **模型-视图-控制器(MVC)**:理解GEF如何实现MVC设计模式,以及如何将数据模型与图形视图绑定。 - **事件处理**:学习如何监听和响应用户交互,如点击、拖放、键盘输入等。 - **撤销/重做(Undo/Redo)**:了解...

    GEF 3.10 eclipse 插件

    1. **模型视图控制器(MVC)架构**:GEF 3.10采用MVC设计模式,将模型、视图和控制器分离,提高了代码的可维护性和可重用性。 2. **图元工厂(Figure Factory)**:提供了丰富的图元资源,用于创建图形元素,如线条...

    GEF开发指南---插件开发

    ### GEF开发指南——插件开发关键知识点解析 #### 一、概述 ...通过阅读本书,读者不仅能够了解GEF的基本原理,还能掌握如何利用GEF构建复杂的图形编辑器。对于初学者来说,这本书是一本很好的入门指南。

    GEF教程

    此外,GEF框架还充分利用了诸如MVC(Model-View-Controller)架构等经典设计模式,确保了代码的清晰性和可维护性。 #### GEF入门挑战与策略 面对GEF框架的学习门槛,正确的学习策略至关重要。作者在“八进制”Blog...

    GEF-SDK-3.3.1.zip

    1. **GEF架构**:GEF的核心架构包括模型(Model)、视图(View)和控制器(Controller)三部分,遵循Model-View-Controller(MVC)设计模式,确保了良好的代码组织和可维护性。 2. **Zest图表库**:GEF通常与Zest...

    GEF_Tutorial.rar(GEF开发指南)

    GEF的核心概念包括模型(Model)、视图(View)和控制器(Controller)。模型是数据结构,负责存储和处理数据;视图则将模型的数据可视化,展示给用户;控制器则是模型和视图之间的桥梁,处理用户的交互操作。此外,...

    GEF学习资料.zip

    它为开发者提供了一套全面的工具,用于创建复杂的图形用户界面,特别适用于创建数据建模、流程设计、系统架构等领域的可视化编辑器。GEF主要基于SWT/JFace技术,提供了丰富的图形绘制、事件处理、模型与视图同步等...

    GEF入门系列

    - **模型-视图-控制器(MVC)**:GEF基于经典的MVC设计模式,其中模型负责存储数据,视图负责显示数据,而控制器则处理用户交互。 - **编辑领域(EditPart)**:编辑领域是GEF中的核心组件,它将模型与视图关联...

    自己下的GEF资源打包

    它提供了一套强大的工具和API,使得开发者能够快速、便捷地创建出复杂的图形用户界面,特别适合于创建数据建模、流程设计、系统配置等领域的应用程序。 "GEF_Tutorial.pdf"很可能是GEF的基础教程,涵盖了GEF的基本...

    GEF中文教程+代码

    在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...

    GEF学习资料

    1. **GEF架构**:理解并掌握模型-视图-控制器的设计模式,以及编辑领域的概念。 2. **图形元素操作**:学习如何创建、删除、移动和修改图形元素,包括连接线和节点。 3. **交互处理**:了解GEF如何处理用户的鼠标和...

    GEF教程及demo源码GEF_RCP_DEMO.zip

    学习如何利用Eclipse的调试工具进行GEF应用的调试,以及编写测试用例验证功能的正确性。 10. **扩展性与可定制性** GEF的开放性和模块化设计使其具有高度的可扩展性和可定制性。开发者可以根据需求添加新的模型...

Global site tag (gtag.js) - Google Analytics