选项板提供了用户选择模型元素,并提供相应的机制把模型和视图加入图形编辑器的能力。
1.选项板(PaletteRoot)的功能
GEF是一个图形编辑框架,它的主编辑区域是一个图形的视图(类似与JFace的Viewer),另外,用户还可以选择选项板上相应的模型,把选择的模型对应的视图加入到图形编辑区域进行编辑。
在GEF中,图形编辑器实现类的getPaletteRoot方法将返回一个PaletteRoot对象,用户可以在PaletteRoot中添加模型选 项入口项(ToolEntry)。例如,在选择板中加入一个连线模型的入口,可以加入“new ConnectionCreationToolEntry("连线", "Create a connection", null, null, null);”,ToolEntry的参数描述了选项板中选项的显示标签、显示图标、提示信息、模型的模板类及模型的创建工厂类等信息。
2.选项板的实现
在选项板中创建模型的入口,能添加模型的选择项(ToolEntry)和模型分组项(PaletteDrawer),代码如下:
上面代码加入了连线模型、分组项、取消选择项和一个节点项(Node模型)。建立的选项板如下图:

1.选项板(PaletteRoot)的功能
GEF是一个图形编辑框架,它的主编辑区域是一个图形的视图(类似与JFace的Viewer),另外,用户还可以选择选项板上相应的模型,把选择的模型对应的视图加入到图形编辑区域进行编辑。
在GEF中,图形编辑器实现类的getPaletteRoot方法将返回一个PaletteRoot对象,用户可以在PaletteRoot中添加模型选 项入口项(ToolEntry)。例如,在选择板中加入一个连线模型的入口,可以加入“new ConnectionCreationToolEntry("连线", "Create a connection", null, null, null);”,ToolEntry的参数描述了选项板中选项的显示标签、显示图标、提示信息、模型的模板类及模型的创建工厂类等信息。
2.选项板的实现
在选项板中创建模型的入口,能添加模型的选择项(ToolEntry)和模型分组项(PaletteDrawer),代码如下:
java 代码
- package com.example.tools;
- import java.util.ArrayList;
- import java.util.List;
- import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
- import org.eclipse.gef.palette.ConnectionCreationToolEntry;
- import org.eclipse.gef.palette.PaletteContainer;
- import org.eclipse.gef.palette.PaletteDrawer;
- import org.eclipse.gef.palette.PaletteGroup;
- import org.eclipse.gef.palette.PaletteRoot;
- import org.eclipse.gef.palette.SelectionToolEntry;
- import org.eclipse.gef.palette.ToolEntry;
- import org.eclipse.gef.requests.SimpleFactory;
- import com.example.model.Node;
- public class PaletteFactory {
- public static PaletteRoot createPalette() {
- //新建选项板
- PaletteRoot paletteRoot = new PaletteRoot();
- //添加选项板中的模型选项
- paletteRoot.addAll(createCategories(paletteRoot));
- return paletteRoot;
- }
- private static List createCategories(PaletteRoot root) {
- List categories = new ArrayList();
- //添加分组选项
- categories.add(createControlGroup(root));
- categories.add(createComponentsDrawer());
- return categories;
- }
- private static PaletteContainer createControlGroup(PaletteRoot root) {
- PaletteGroup controlGroup = new PaletteGroup("Control Group");
- List entries = new ArrayList();
- //添加取消模型选择项
- ToolEntry tool = new SelectionToolEntry();
- entries.add(tool);
- //设置SelectionToolEntry为默认选项
- root.setDefaultEntry(tool);
- //添加连线模型选项入口
- tool = new ConnectionCreationToolEntry("连线", "Create a connection", null, null, null);
- entries.add(tool);
- controlGroup.addAll(entries);
- return controlGroup;
- }
- private static PaletteContainer createComponentsDrawer() {
- //添加组件分组页
- PaletteDrawer drawer = new PaletteDrawer("Components");
- List entries = new ArrayList();
- //添加Node模型选项入口
- ToolEntry tool = new CombinedTemplateCreationEntry("节点", "创建一个节点", Node.class, new SimpleFactory(
- Node.class), null, null);
- entries.add(tool);
- drawer.addAll(entries);
- return drawer;
- }
- }
上面代码加入了连线模型、分组项、取消选择项和一个节点项(Node模型)。建立的选项板如下图:
小结:
最近由于项目需要,开始学习GEF。首先感谢八进制,我就是照着他写的GEF入门系列,再配合书本学习的。感觉GEF是很完善的图形编辑框架,能够用它构 造出功能非常强大的图形编辑器,但同时GEF还是比较复杂的,特别是对于没有接触过的初学者来说,很有可能里面的类都不知道是干什么的,更不了解类中的方 法;即使从字面上知道了类的作用,具体自己写的时候又不知道如何下手,本人也遇到了这些问题。我想先把GEF的原理搞清楚,再来细看里面的细节可能要好一 些。
最近由于项目需要,开始学习GEF。首先感谢八进制,我就是照着他写的GEF入门系列,再配合书本学习的。感觉GEF是很完善的图形编辑框架,能够用它构 造出功能非常强大的图形编辑器,但同时GEF还是比较复杂的,特别是对于没有接触过的初学者来说,很有可能里面的类都不知道是干什么的,更不了解类中的方 法;即使从字面上知道了类的作用,具体自己写的时候又不知道如何下手,本人也遇到了这些问题。我想先把GEF的原理搞清楚,再来细看里面的细节可能要好一 些。
本文介绍了GEF框架中选项板(PaletteRoot)的功能与实现方式,包括如何通过添加模型选项入口项(ToolEntry)和模型分组项(PaletteDrawer)来创建模型入口。
2257

被折叠的 条评论
为什么被折叠?



