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

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

阅读更多

编辑器设计

为了便于查看,编辑器设计部分进行了简化处理,去掉了保存和导入部分,参考代码如下:

 

public class FormEditor extends GraphicalEditorWithPalette {

      public static final String ID = "com.nuoda.form.rcp.formeditor";

      GraphicalViewer viewer;

      private DiagramNode diagram;

 

     

      public DiagramNode getDiagram() {

             return diagram;

      }

      public void setDiagram(DiagramNode diagram) {

             this.diagram = diagram;

      }

     

      public FormEditor(){

             setEditDomain(new DefaultEditDomain(this));

      }

      protected PaletteRoot getPaletteRoot() {

             // TODO Auto-generated method stub

             return FormPaletteFactory.createPalette();

      }

      public void configureGraphicalViewer(){

             super.configureGraphicalViewer();

             viewer = getGraphicalViewer();

             ScalableRootEditPart rootEditPart = new ScalableRootEditPart();

            

             viewer.setRootEditPart(rootEditPart);

             viewer.setEditPartFactory(new FormPartFactory());

             KeyHandler keyHandler = new KeyHandler();

            

             keyHandler.put(

                           KeyStroke.getPressed(SWT.DEL, 127,0),

                           getActionRegistry().getAction(GEFActionConstants.DELETE)

                           );

            

             keyHandler.put(

                           KeyStroke.getPressed(SWT.F2,0),

                           getActionRegistry().getAction(GEFActionConstants.DIRECT_EDIT)

                           );

 

             getGraphicalViewer().setKeyHandler(keyHandler);

      }

      protected void initializeGraphicalViewer() {

             // TODO Auto-generated method stub

            

             this.viewer.setContents(this.diagram);

            

             IAction action=new CellOperateAction(getGraphicalViewer());

             getActionRegistry().registerAction(action);

             getSelectionActions().add(action.getId());

             TableContextMenuProvider provider=new TableContextMenuProvider(getGraphicalViewer(),getActionRegistry());

        getGraphicalViewer().setContextMenu(provider);

       

      }

      public void doSave(IProgressMonitor monitor){

 

      }

      protected void setInput(IEditorInput input){

             super.setInput(input);

            

             this.diagram=new DiagramNode();

      }

 

}

调色板设计

上述编辑器有一个固定位置的调色板,调色板参考代码如下:

public class FormPaletteFactory {

       public static PaletteRoot createPalette() {

              PaletteRoot root = new PaletteRoot();

                    PaletteGroup toolGroup = new PaletteGroup("工具");

                    ToolEntry tool = new SelectionToolEntry();

                    toolGroup.add(tool);

                    root.setDefaultEntry(tool);

                   

                    tool = new MarqueeToolEntry();

                    toolGroup.add(tool);

                   

                    PaletteDrawer drawer = new PaletteDrawer("数据元素");

                    ImageDescriptor descriptor= AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, "/gar.ico");

                   

                    CreationToolEntry creationToolEntry = new CreationToolEntry(

                                  ".Table",

                                  ".Table",

                                  new SimpleFactory(TableNode.class),

                                  descriptor,

                                  descriptor

                                  );

                    drawer.add(creationToolEntry);

                    creationToolEntry = new CreationToolEntry(

                                  ".Row",

                                  ".Row",

                                  new SimpleFactory(RowNode.class),

                                  descriptor,

                                  descriptor

                                  );

                    drawer.add(creationToolEntry);

                   

                    creationToolEntry = new CreationToolEntry(

                                  ".Column",

                                  ".Column",

                                  new SimpleFactory(ColumnNode.class),

                                  descriptor,

                                  descriptor

                                  );

                    drawer.add(creationToolEntry);

                   

                    creationToolEntry = new CreationToolEntry(

                                  ".Cell",

                                  ".Cell",

                                  new SimpleFactory(CellNode.class),

                                  descriptor,

                                  descriptor

                                  );

                    drawer.add(creationToolEntry);

                   

            

 

                    return root;

 

       }

}

EditPart工厂

模型和控制器的对应关系通过工厂来实现。

public class FormPartFactory implements EditPartFactory {

 

      public EditPart createEditPart(EditPart context, Object model) {

             // TODO Auto-generated method stub

             EditPart part = getPartForElement(model);

             if(part != null){

                    part.setModel(model);

             }

             return part;

      }

      private EditPart getPartForElement(Object modelElement){

             //System.out.println("here...TableEditPart():"+modelElement.toString());

             if(modelElement instanceof DiagramNode){

                    return new DiagramEditPart();

             }else if(modelElement instanceof TableNode){

                    //System.out.println("here...TableEditPart()");

                    FormTableEditPart part=new FormTableEditPart();

                    //System.out.println("here...TableEditPart()");

                   

                    return part;

                    //return new FormTableEditPart();

             }else if(modelElement instanceof CellNode){

                    return new CellEditPart();

             }else if(modelElement instanceof RowNode){

                    return new RowEditPart();

             }else if(modelElement instanceof ColumnNode){

                    return new ColumnEditPart();

             }else if(modelElement instanceof FieldNode){

                    return new FieldEditPart();

             }

             throw new RuntimeException("Error");

      }

 

}

 

至此,一个表格系统基本框架已经完成,当然,策略和命令系统还需要实现。有兴趣的朋友可以根据代码来研究和实现,欢迎交流。

分享到:
评论

相关推荐

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

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

    界面设计GEF应用实例

    总的来说,"界面设计GEF应用实例"的学习涵盖了图形用户界面设计的基本原理和实践技巧,对于希望在Eclipse RCP环境中开发自定义图形编辑器的开发者来说,是非常宝贵的资源。通过这些实例,开发者能够深入理解GEF的...

    GEF-ALL-3.4.2(1).zip

    GEF的核心设计理念是将图形编辑器的实现分解为一系列可重用的组件,这些组件可以组合起来创建各种定制化的图形编辑环境。这个框架的主要组成部分包括: 1. **Model**:模型是编辑器的数据基础,定义了图形元素的...

    eclipse插件开发之GEF编辑器

    对gef中相关内容的描述,这里面我只是个人的理解,描述gef的最基本的功能,若需深入研究,可以从网上查询更多资料,我个人也在继续研究中。

    GEF入门系列

    通过这个GEF入门系列,你可以逐步掌握如何利用GEF创建强大的图形化编辑器,无论是简单的绘图工具还是复杂的业务流程编辑器,GEF都能提供坚实的技术支持。在实践中不断探索和学习,你将能够充分发挥GEF的潜力,构建出...

    GEF中文教程+代码

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

    GEF-SDK-3.3.1.zip

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

    GEF学习资料.zip

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

    GEF教程

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

    eclipse gef ve gmf

    Eclipse是一个著名的开源集成开发环境(IDE),广泛用于Java、C++...通过研究这些资源,开发者可以学习如何利用Eclipse的这些框架创建自己的图形化编辑器,提高开发效率,同时也可以深入理解模型驱动开发的理念和实践。

    GEF开发整合资料大全

    开发者可以利用Java的面向对象特性,结合GEF提供的API,轻松地构建出强大的图形编辑器。通过Eclipse插件机制,这些编辑器可以无缝集成到Eclipse IDE中,提供给开发者或最终用户使用。 **GEF在图形界面开发中的应用*...

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

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

    GEF Example Source Code

    这些示例可以帮助开发者理解和学习如何有效地利用GEF库来创建自定义的图形编辑器。 描述中的"GEF Example Source Code"进一步强调了这是一个专注于GEF实际应用的代码资源,可能是为了教学目的或帮助开发者快速上手...

    自己下的GEF资源打包

    GEF,全称为Graph Editor Framework,是Eclipse平台下用于构建图形编辑器的一个开源框架。它提供了一套强大的工具和API,使得开发者能够快速、便捷地创建出复杂的图形用户界面,特别适合于创建数据建模、流程设计、...

    java gef开发实例

    通过这个实例,开发者可以掌握如何利用GEF创建图形界面,理解MVC模式在图形编辑器中的应用,进一步提升在Eclipse RCP或图形化工具开发中的能力。通过实际操作和调试,可以加深对GEF框架的理解,并为将来更复杂的图形...

    gef-step3.zip_3gef_GEF eclipse_GEF-step2_gef_gef-st

    这些编辑器可以用来设计流程图、电路图、软件架构图等,广泛应用于软件工程、系统设计和许多其他领域。GEF提供了一种模型-视图-控制器(MVC)的设计模式,使得开发者可以分离图形表示与业务逻辑,提高代码的可维护性...

    Eclipse的GEF学习

    GEF,全称为Graphical Editor Framework,是Eclipse平台下的一款图形编辑框架,主要用于构建图形化编辑器,如流程设计器、UML类图编辑器等。GEF遵循经典的MVC(Model-View-Control)架构,这一设计模式使得模型、...

    Eclipse插件gef 3.8.0

    GEF主要用于创建可定制的、交互式的、基于图的编辑环境,广泛应用于软件建模、系统设计和可视化编程等领域。GEF 3.8.0是该框架的一个稳定版本,针对Eclipse 3.7和4.2两个不同版本的IDE进行了优化和兼容性调整。 **1...

    GEF初学者开发样例

    GEF是基于Java语言开发的,它遵循MVC(模型-视图-控制器)设计模式,为图形编辑器的开发提供了强大的支持。通过GEF,开发者可以快速实现图形的绘制、编辑操作、拖放功能以及自定义的图形布局。GEF不仅适用于开发...

Global site tag (gtag.js) - Google Analytics