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

利用GEF制作表格系统(模型设计)

阅读更多

模型设计

1、建立通用模型,实现模型属性变化的跟踪

public class AbstractNode implements Cloneable,IPropertySource, Serializable {

      private static final long serialVersionUID=10000100L;

     

     

      private PropertyChangeSupport listeners = new PropertyChangeSupport(this);

      public void addPropertyChangeListener(PropertyChangeListener listener){

             listeners.addPropertyChangeListener(listener);

      }

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

             listeners.firePropertyChange(propName,oldValue,newValue);

      }

      public void removePropertyChange(PropertyChangeListener listener){

             listeners.removePropertyChangeListener(listener);

      }

}

 

2、建立画布模型,增加子元素列表,实现子元素变化的追踪

public class DiagramNode extends AbstractNode{

      public static final String P_CHILDREN ="_children";

      protected List children=new ArrayList(); 

      public void setChildren(List children){

             if(children !=  null){

                    this.children=children;

             }else{

                    this.children=new ArrayList();

             }

             this.firePropertyChange(P_CHILDREN, null, children);

      }

      public List getChildren(){

             return this.children;

      }

      public void addChild(Object child){

             children.add(child);

             firePropertyChange(P_CHILDREN, null, null);     

      }

      public void addChild(int index,Object child){

             if(index == -1){                 

                    this.children.add(child);

             }else{

                    this.children.add(index, child);

             }

             firePropertyChange(P_CHILDREN,null,null);

      }    

      public void removeChild(Object child){

             children.remove(child);

             firePropertyChange(P_CHILDREN,null,null);

      }

      public void moveChild(int index,AbstractNode child){

         children.remove(child);

         children.add(index, child);

         firePropertyChange(P_CHILDREN,null,null);

    }

}

3、建立表格模型,增加子元素列表,实现对子元素变化的追踪;建立表格间距等属性的编辑和追踪管理

public class TableNode extends AbstractNode {

      public static final String P_CHILDREN ="_children";

      public static final String P_GRIDMANAGER="_gmanaer";

      public static final String P_CHILDCHANGE="_change";

      public static final String P_TABLEHSPACE="_hspace";

      public static final String P_TABLEVSPACE="_vspace";

      public static final String P_MARGINWIDTH="_hmargin";

      public static final String P_MARGINHEIGHT="_vmargin";

      public static final String P_TABLEBGCOLOR="_bgcolor";

      public static final String P_OPERATE="_operate";

     

      protected List children=new ArrayList(); 

      private boolean border=true;

      private GridLayout grid;

      private int widthHint  = 20;

      private int heightHint = 20;

      private int rows=0;

      private String operate="row";

      private boolean childChange=false;

     

      private String bgColor="255:255:255";

      public TableNode(){

             super();

             constraint.width=widthHint*4;

             constraint.height=40;

      }

      public void setChildren(List children){

             if(children !=  null){

                    this.children=children;

             }else{

                    this.children=new ArrayList();

             }

             this.firePropertyChange(P_CHILDREN, null, children);

      }

      public List getChildren(){

             return this.children;

      }

      public void addChild(Object child){

             children.add(child);

             firePropertyChange(P_CHILDREN, null, null);

     

      }

      public void addChild(int index,Object child){

             if(index == -1){

                   

                    this.children.add(child);

             }else{

                    this.children.add(index, child);

             }

             firePropertyChange(P_CHILDREN,null,null);

      }

     

      public void removeChild(Object child){

             children.remove(child);

             firePropertyChange(P_CHILDREN,null,null);

      }

      public void moveChild(int index,AbstractNode child){

         children.remove(child);

         children.add(index, child);

         firePropertyChange(P_CHILDREN,null,null);

    }

  

      public GridLayout getGrid() {

             if(grid==null){

                    grid = new GridLayout();

                    grid.numColumns=4;

             }

             return grid;

      }

      public void setGrid(GridLayout grid) {

             this.grid = grid;

             this.firePropertyChange(P_GRIDMANAGER, null, grid);

      }

      public boolean isBorder() {

             return border;

      }

      public void setBorder(boolean border) {

             this.border = border;

      }

      public int getWidthHint() {

             return widthHint;

      }

      public void setWidthHint(int widthHint) {

             this.widthHint = widthHint;

      }

      public int getHeightHint() {

             return heightHint;

      }

      public void setHeightHint(int heightHint) {

             this.heightHint = heightHint;

      }

      public int getRows() {

             return rows;

      }

      public void setRows(int rows) {

             this.rows = rows;

      }

      public String getOperate() {

             return operate;

      }

      public void setOperate(String operate) {

             this.operate = operate;

      }

      public boolean isChildChange() {

             return childChange;

      }

      public void setChildChange(boolean childChange) {

             this.childChange = childChange;

             this.firePropertyChange(P_CHILDCHANGE, null, null);

      }

      //表格属性

      public int getTableHorizontalSpace(){

             GridLayout grid=getGrid();

             return grid.horizontalSpacing;

      }

      public void setTableHorizontalSpace(String ss){

             GridLayout grid=getGrid();

             int delta=Integer.parseInt(ss)-grid.horizontalSpacing;

             if(delta != 0){

                    grid.horizontalSpacing=Integer.parseInt(ss);

                    this.firePropertyChange(P_GRIDMANAGER,null,"hspace:"+delta);

             }

      }

     

      public int getTableVerticalSpace(){

             GridLayout grid=getGrid();

             return grid.verticalSpacing;

      }

      public void setTableVerticalSpace(String ss){

             GridLayout grid=getGrid();

             int delta=Integer.parseInt(ss) - grid.verticalSpacing ;

             if(delta != 0){

                    grid.verticalSpacing=Integer.parseInt(ss);

                    this.firePropertyChange(P_GRIDMANAGER,null,"vspace:"+delta);

             }

      }

     

      public int getTableHorizontalMargin(){

             GridLayout grid=getGrid();

             return grid.marginWidth;

      }

      public void setTableHorizontalMargin(String ss){

             GridLayout grid=getGrid();

             int delta=Integer.parseInt(ss) - grid.marginWidth;

             if(delta !=0 ){

                    grid.marginWidth=Integer.parseInt(ss);

                    this.firePropertyChange(P_GRIDMANAGER,null, margin:"+delta);

             }

      }

     

      public int getTableVerticalMargin(){

             GridLayout grid=getGrid();

             return grid.marginHeight;

      }

      public void setTableVerticalMargin(String ss){

             GridLayout grid=getGrid();

             int delta=Integer.parseInt(ss) - grid.marginHeight;

             if(delta != 0){

                    grid.marginHeight=Integer.parseInt(ss);

                    this.firePropertyChange(P_GRIDMANAGER, null, "vmargin:"+delta);

             }

      }

      public Color getBgColor() {

             if(this.bgColor ==null){

                    return new Color(null,255,255,255);

             }else{

                    String[] rgb=bgColor.split(":");

                    return new Color(null,Integer.parseInt(rgb[0]),Integer.parseInt(rgb[1]),Integer.parseInt(rgb[2]));

             }

            

      }

      public void setBgColor(Color bgColor) {

             this.bgColor = bgColor.getRed()+":"+bgColor.getGreen()+":"+bgColor.getBlue();

             this.firePropertyChange(P_TABLEBGCOLOR, null, null);

      }

     

分享到:
评论

相关推荐

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

    ### 基于GEF框架的SVG制作工具设计与实现 #### 摘要与引言 本文聚焦于探讨一种新型SVG(可缩放矢量图形)制作工具的设计与实现,该工具基于Eclipse平台的GEF(Graphic Editor Framework)框架。SVG作为一种基于XML...

    界面设计GEF应用实例

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

    Eclipse的GEF学习

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

    java gef开发实例

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

    GEF-ALL-3.4.2(1).zip

    总的来说,GEF提供了一套完整的框架,使得开发人员可以专注于业务逻辑和用户界面的设计,而无需从头构建底层的图形系统。通过对GEF的深入理解和使用,我们可以创建出高效、可扩展的图形编辑工具,广泛应用于软件建模...

    GEF中文教程+代码

    GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的绘图操作。它提供了一组模型视图控制器(MVC)组件,包括图形模型、图形视图和图形编辑器,使得开发者可以方便地...

    GEF Example Source Code

    GEF主要应用于领域包括模型驱动工程(MDE)、软件建模、流程图和系统设计等。 标题"GEF Example Source Code"表明这是一个关于GEF框架的示例源代码集合,它可能包含各种演示如何使用GEF构建图形编辑功能的代码实例...

    简单gef框架

    此外,gef的插件系统也可能提供了特定于流程设计的工具或功能。 6. **工作流实例(workflow1)**:在提供的压缩包文件"workflow1"中,可能包含了使用gef进行流程设计的一个具体示例。这可能是一个简单的脚本或项目...

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

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

    GEF的动态变化二

    3. **模型-视图-控制器(MVC)模式**:理解GEF如何遵循MVC设计模式,模型如何驱动视图的变化。 4. **定时器或事件驱动**:如何使用Java的定时器或事件监听器来控制动画的时间序列。 5. **图形变换**:如何应用矩阵...

    GEF入门系列

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

    GEF入门学习例子

    这个入门学习例子旨在帮助初学者理解GEF的基本用法和核心概念,通过实例展示如何利用GEF实现工具栏、菜单栏、属性栏以及图形的交互功能,如移动、删除、撤销、连线等,并涵盖了大纲视图和鹰眼功能的实现。...

    自己下的GEF资源打包

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

    GEF学习资料.zip

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

    GEF教程及demo源码GEF_RCP_DEMO.zip

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

    GEF开发整合资料大全

    在实际开发中,首先要理解模型-视图-控制器(MVC)的设计模式,这是GEF的基础。然后,你需要创建模型类,定义图形元素的数据结构;接着,编写EditPart和Figure,实现视图的绘制和用户交互;最后,利用Command来实现...

    GEF_Demo_Code20170307

    这个项目旨在演示如何利用GEF进行图形界面开发,并且特别关注了通过适配器(Adapter)扩展点来实现属性页配置以及在非Editor的ViewPart中使用GEF。 GEF是Eclipse平台下的一个开源库,专门用于构建可自定义的、图形...

    GEF-SDK-3.3.1.zip

    7. **扩展点和插件系统**:Eclipse的插件系统使得GEF可以无缝集成到Eclipse环境中,开发者可以利用Eclipse的扩展点来定制和扩展编辑器。 8. **样例和教程**:GEF SDK通常会包含一些示例项目和详细的开发教程,帮助...

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

    - **EMF**:EMF(Eclipse Modeling Framework)是一个用于创建模型驱动的应用程序的框架,与GEF结合使用时能够处理复杂的模型数据。 #### 三、开发环境搭建 根据文档描述,开发环境主要包括以下组件: - **JDK**:...

Global site tag (gtag.js) - Google Analytics