编辑器设计
为了便于查看,编辑器设计部分进行了简化处理,去掉了保存和导入部分,参考代码如下:
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");
}
}
至此,一个表格系统基本框架已经完成,当然,策略和命令系统还需要实现。有兴趣的朋友可以根据代码来研究和实现,欢迎交流。
分享到:
相关推荐
本文旨在利用Eclipse平台上的GEF(Graphic Editor Framework)框架,设计并实现一个SVG的可视化制作工具,以解决SVG源码编辑的问题。GEF是一种用于构建图形编辑器的强大的框架,它基于Model-View-Controller(MVC)...
总的来说,"界面设计GEF应用实例"的学习涵盖了图形用户界面设计的基本原理和实践技巧,对于希望在Eclipse RCP环境中开发自定义图形编辑器的开发者来说,是非常宝贵的资源。通过这些实例,开发者能够深入理解GEF的...
GEF的核心设计理念是将图形编辑器的实现分解为一系列可重用的组件,这些组件可以组合起来创建各种定制化的图形编辑环境。这个框架的主要组成部分包括: 1. **Model**:模型是编辑器的数据基础,定义了图形元素的...
对gef中相关内容的描述,这里面我只是个人的理解,描述gef的最基本的功能,若需深入研究,可以从网上查询更多资料,我个人也在继续研究中。
通过这个GEF入门系列,你可以逐步掌握如何利用GEF创建强大的图形化编辑器,无论是简单的绘图工具还是复杂的业务流程编辑器,GEF都能提供坚实的技术支持。在实践中不断探索和学习,你将能够充分发挥GEF的潜力,构建出...
在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...
7. **扩展点和插件系统**:Eclipse的插件系统使得GEF可以无缝集成到Eclipse环境中,开发者可以利用Eclipse的扩展点来定制和扩展编辑器。 8. **样例和教程**:GEF SDK通常会包含一些示例项目和详细的开发教程,帮助...
它为开发者提供了一套全面的工具,用于创建复杂的图形用户界面,特别适用于创建数据建模、流程设计、系统架构等领域的可视化编辑器。GEF主要基于SWT/JFace技术,提供了丰富的图形绘制、事件处理、模型与视图同步等...
此外,GEF框架还充分利用了诸如MVC(Model-View-Controller)架构等经典设计模式,确保了代码的清晰性和可维护性。 #### GEF入门挑战与策略 面对GEF框架的学习门槛,正确的学习策略至关重要。作者在“八进制”Blog...
Eclipse是一个著名的开源集成开发环境(IDE),广泛用于Java、C++...通过研究这些资源,开发者可以学习如何利用Eclipse的这些框架创建自己的图形化编辑器,提高开发效率,同时也可以深入理解模型驱动开发的理念和实践。
开发者可以利用Java的面向对象特性,结合GEF提供的API,轻松地构建出强大的图形编辑器。通过Eclipse插件机制,这些编辑器可以无缝集成到Eclipse IDE中,提供给开发者或最终用户使用。 **GEF在图形界面开发中的应用*...
GEF是Eclipse生态系统的一部分,利用Eclipse的插件体系,开发者可以通过编写插件来扩展其功能,创建定制化的图形编辑器。 **插件开发** 在Eclipse中至关重要,因为它是实现功能扩展的主要方式。GEF插件开发涉及创建...
这些示例可以帮助开发者理解和学习如何有效地利用GEF库来创建自定义的图形编辑器。 描述中的"GEF Example Source Code"进一步强调了这是一个专注于GEF实际应用的代码资源,可能是为了教学目的或帮助开发者快速上手...
GEF,全称为Graph Editor Framework,是Eclipse平台下用于构建图形编辑器的一个开源框架。它提供了一套强大的工具和API,使得开发者能够快速、便捷地创建出复杂的图形用户界面,特别适合于创建数据建模、流程设计、...
通过这个实例,开发者可以掌握如何利用GEF创建图形界面,理解MVC模式在图形编辑器中的应用,进一步提升在Eclipse RCP或图形化工具开发中的能力。通过实际操作和调试,可以加深对GEF框架的理解,并为将来更复杂的图形...
这些编辑器可以用来设计流程图、电路图、软件架构图等,广泛应用于软件工程、系统设计和许多其他领域。GEF提供了一种模型-视图-控制器(MVC)的设计模式,使得开发者可以分离图形表示与业务逻辑,提高代码的可维护性...
GEF,全称为Graphical Editor Framework,是Eclipse平台下的一款图形编辑框架,主要用于构建图形化编辑器,如流程设计器、UML类图编辑器等。GEF遵循经典的MVC(Model-View-Control)架构,这一设计模式使得模型、...
GEF主要用于创建可定制的、交互式的、基于图的编辑环境,广泛应用于软件建模、系统设计和可视化编程等领域。GEF 3.8.0是该框架的一个稳定版本,针对Eclipse 3.7和4.2两个不同版本的IDE进行了优化和兼容性调整。 **1...
GEF是基于Java语言开发的,它遵循MVC(模型-视图-控制器)设计模式,为图形编辑器的开发提供了强大的支持。通过GEF,开发者可以快速实现图形的绘制、编辑操作、拖放功能以及自定义的图形布局。GEF不仅适用于开发...