gef中添加可折叠调色板原理以及实现 中主要的PaletteRoot的创建:
GEF 3.0还允许用户对调色板里的各种工具进行定制,例如隐藏某个工具,或是修改工具的描述等等,这是通过给PaletteViewer定义一个 PaletteCustomizer实例实现的,但由于时间关系,这里暂时不详细介绍了,如果需要这项功能你可以参考Logic例子中的实现方法。
package com.easyway.plugin.gef.diagram.dev.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.MarqueeToolEntry;
import org.eclipse.gef.palette.PaletteContainer;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.gef.palette.PaletteGroup;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.PaletteSeparator;
import org.eclipse.gef.palette.SelectionToolEntry;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.requests.SimpleFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import com.easyway.plugin.gef.diagram.dev.model.Node;
import com.easyway.plugin.gef.diagram.text.Activator;
/**
* 采用单态模式的创建调色板工具栏
* 我们利用自己写的一个工具类PaletteFactory构造一个PaletteRoot对象并返回,我们的调色板里需要有三种工具:
* 选择工具、节点工具和连接工具。在GEF里,调色板里可以有抽屉(PaletteDrawer)把各种工具归类放置,每个
* 工具都是一个ToolEntry,选择工具(SelectionToolEntry)和连接工具
* (ConnectionCreationToolEntry)是预先定义好的几种工具中的两个,所以可以直接使用。
* 调色板工厂的创建的应用
* @author longgangbai
*
*/
publicclass PaletteFactory {
privatefinalstatic String PALETTE_OWNER_PLUGIN=Activator.PLUGIN_ID+".palette.seperator";
privatestatic PaletteRoot paletteRoot;
privatefinalstatic Class clazz=PaletteFactory.class.getClass();
/**
* 获取调色板工具栏
* @return
*/
@SuppressWarnings("unused")
privatestatic PaletteRoot getPaletteRoot(){
if(null==paletteRoot)
{
paletteRoot=createPalette();
}
returnpaletteRoot;
}
/**
* 创建调色板的控件工具组
* @param root
* @return
*/
privatestatic PaletteContainer createControlGroup(PaletteRoot root) {
//创建一组默认控件分组对象
PaletteGroup controlGroup=new PaletteGroup(" Control Group ");
//创建选中工具控件
ToolEntry tool=new SelectionToolEntry();
controlGroup.add(tool);
//设置选中控件为默认的工具
paletteRoot.setDefaultEntry(tool);
//创建选中工具的框
controlGroup.add(new MarqueeToolEntry());
//创建分隔条
PaletteSeparator separator =new PaletteSeparator(PALETTE_OWNER_PLUGIN);
separator.setUserModificationPermission(PaletteEntry.PERMISSION_NO_MODIFICATION);
controlGroup.add(separator);
//创建一个连接控件的工具
controlGroup.add(
new ConnectionCreationToolEntry("Connections","Create connections",
null,
ImageDescriptor.createFromFile(clazz,"icons/connections16.gif"),
ImageDescriptor.createFromFile(clazz,"icons/connections24.gif")
));
return controlGroup;
}
/**
* 创建调色板的组件工具类
* @return
*/
@SuppressWarnings("unchecked")
privatestatic PaletteContainer createComponentsDrawer() {
//创建调色板组件类
PaletteDrawer componetsDrawer = new PaletteDrawer("Components", null);
//容器组件集合
List toolEntrys = new ArrayList();
//创建节点类的(对于节点工具,要使用CombinedTemplateCreationEntry,并把节点类型作为
//参数之一传给它,创建节点工具的代码如下所示)
ToolEntry tool = new CombinedTemplateCreationEntry(
"Node",
"Create a new Node",
Node.class,
new SimpleFactory(Node.class),
null, /* small icon */
null/* large icon */
);
toolEntrys.add(tool);
componetsDrawer.addAll(toolEntrys);
return componetsDrawer;
}
/**
* 获取所有调色板控件中分类列表
* @param root
* @return
*/
@SuppressWarnings("unchecked")
privatestatic List createCategories(PaletteRoot root) {
//创建调色板分类集合
List categories = new ArrayList();
//添加控件组
categories.add(createControlGroup(root));
//添加组件组
categories.add(createComponentsDrawer());
return categories;
}
/**
* 创建调色板工具栏
*/
publicstatic PaletteRoot createPalette() {
//创建调色板工具栏的Root
PaletteRoot paletteRoot = new PaletteRoot();
paletteRoot.addAll(createCategories(paletteRoot));
return paletteRoot;
}
}
在视图编辑器类中重写相关的方法如下:
//
相关推荐
本文将深入探讨如何在GEF中实现属性视图,并通过一个处理器(Processor)模型的例子来阐述具体步骤。 1. **属性视图的概述** - 属性视图用于展示图形模型的相关属性,如处理器的温度、IP地址和类型等。 - 当图形...
实现拷贝粘贴功能在GEF中涉及到以下几个关键步骤: 1. **定义CopyCommand和PasteCommand**:你需要创建自定义的CopyCommand和PasteCommand类,继承自GEF提供的基础命令类,如DirectEditCommand或EditCommand。这些...
- `org.eclipse.gef.commands.Command`:命令模式在GEF中用于执行可撤销/重做的操作,如添加、删除或修改图形元素。 - `org.eclipse.gef.requests.Request`:表示用户或系统对编辑域的某种请求,如创建新对象或选择...
这两篇文章可能分别由CSDN博主和博客园博主分享了他们在使用GEF和相关技术,如Draw2D(用于在GEF中绘制2D图形的库)时的经验和技巧。 在深入理解GEF时,我们需要关注以下几个核心概念: 1. **模型-视图-控制器(MVC...
在本教程中,我们将深入探讨GEF的基本概念、设计原则以及如何使用它来开发自己的图形编辑器。 **1. GEF简介** GEF的设计目标是将图形编辑器的实现细节抽象化,让开发者能够专注于业务逻辑和模型设计,而不是底层的...
7. **调色板查看器**:允许用户从一个可定制的调色板中选择图形元素。 **教程目标与资源** 该教程的目标是介绍GEF和Draw2d,强调其主要特性,教导如何快速找到解决方案,并提供实践经验,帮助避免常见错误。参与者...
在GEF中,模型通常由`EObject`和`EObjectImpl`实现,可以使用EMF(Eclipse Modeling Framework)来生成。 2. **视图(View)**: 视图是模型的可视化表示,将模型数据呈现给用户。GEF中的视图由`GraphicalViewer`类...
**GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。GEF提供了一套全面的API和模型,帮助开发者快速构建可定制的、交互式的图形用户界面。该框架的核心...
RCP允许开发者利用Java语言和Eclipse插件体系结构来创建可扩展、模块化的应用程序,这些应用程序可以具有丰富的用户界面和高度定制的功能。 RCP的关键组成部分包括: 1. **Workbench**:工作台是RCP应用的核心,它...
4. **命令(Command)**:GEF中的命令模式用于封装对模型的修改操作,使得撤销/重做功能得以实现。命令对象记录了更改前后的状态,便于执行回滚或重复操作。 5. **图元(Figure)**和**绘图(Drawing)**:GEF通过SWT...
- **Draw2D**: 版本3.1.0或以上,通常包含在GEF中 - **EMF**: 版本2.1.0或以上 ### 创建RCP项目 1. **初始化项目**: - 打开Eclipse并选择“File” > “New” > “Other” > “Plug-in Project”。 - 为项目命名`...
在GEF中,动画通常涉及图元的帧序列,通过改变其位置、大小或其他属性来创造动态效果。可能包含关键帧动画、时间线控制、事件驱动的更新或者其他动画技术。 在GraphAnimation.java中,我们可能会看到以下知识点: 1...
1. **基本概念**:介绍GEF的关键概念,如Figure、EditPart、Command、Model等,以及它们在图形编辑中的角色。 2. **图形组件**:讲解如何创建和操作图形元素,如矩形、圆形、文本等,以及如何添加连接线和组合图形。...
此外,理解MVC(模型-视图-控制器)模式和MVC在GEF中的应用对于提升开发效率至关重要。 总之,通过这个"GEF入门实例代码2",开发者可以了解到如何在Eclipse中构建一个基于GEF的图形编辑器,这不仅涉及数据模型的...
7. **调色板视图**:提供图形元素的选择和插入界面,帮助用户快速创建和编辑图形。 通过这个深入的教程,参与者不仅可以学习到GEF的基本用法,还能了解如何在实际项目中规划和应用GEF,从而提升开发高效图形编辑...
- 添加新的图形元素是GEF中最常见的操作之一。 - 这些元素可以是节点、边、形状等。 **知识点2:实现步骤** 1. **定义新元素模型**:使用Java定义新元素的模型类。 2. **创建新元素视图**:使用GEF提供的绘图工具...
GEF中的Figure类负责图形绘制,通过重写paint()方法实现自定义图形的绘制,同时支持事件监听和交互。 5. **编辑操作与命令模式** GEF使用命令模式来处理用户的编辑操作,每个编辑操作对应一个Command对象。当用户...
- **Draw2D**:包含在GEF中,版本3.1.0及以上 - **EMF (Eclipse Modeling Framework)**:2.1.0 及以上版本 #### 二、创建RCP项目 - **RCP (Rich Client Platform)**:基于Eclipse的富客户端平台,提供了一种构建...
3. 图形编辑器的构建:详细步骤指导如何使用GEF创建可交互的图形编辑器,包括图元的创建、布局管理、编辑操作的实现等。 4. EMF模型的生成与使用:讲解如何定义XML Schema,由EMF自动生成Java类,以及如何在代码中...