一、前言

本文承接上一节:GEF入门实例_总结_04_Eclipse插件启动流程分析

在第三节( GEF入门实例_总结_03_显示菜单和工具栏  ),我们创建了菜单和工具栏。

这一节,我们来实现:点击菜单后,打开一个编辑器。

二、添加扩展

1.选择扩展点

(1)双击plugin.xml,在extensions页中,点击Add...,

(2)搜索 editors,选择 org.eclipse.ui.editors  扩展点,finish

(3) 在新添加的 org.eclipse.ui.editors  扩展点上右键 -> New -> editor,出现下图

2.填写editor节点详情

这里我们约束一下命名规范:所有的id均为全类名

id        :  gef.tutorial.step.ui.editor.DiagramEditor

name  :  Diagram Editor

icon    :   icons/gar.ico

class  :   gef.tutorial.step.ui.editor.DiagramEditor

default : false

二、创建Editor类

1.创建Editor类

如下图,点击class ,会出现一个创建class的对话框。修改继承的基类为:org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette,

然后点击finish。

即可生成Editor类:

package gef.tutorial.step.ui.editor;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette; public class DiagramEditor extends GraphicalEditorWithFlyoutPalette { public DiagramEditor() {
// TODO Auto-generated constructor stub
} @Override
protected PaletteRoot getPaletteRoot() {
// TODO Auto-generated method stub
return null;
} @Override
public void doSave(IProgressMonitor monitor) {
// TODO Auto-generated method stub } }

2.修改Editor类

这里我们添加一个ID,设置一个编辑域

package gef.tutorial.step.ui.editor;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.DefaultEditDomain;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette; public class DiagramEditor extends GraphicalEditorWithFlyoutPalette { //1.添加ID,与扩展点ID保持一致,因此为了避免出错,建议ID统一为全类名
public static final String ID = "gef.tutorial.step.ui.editor.DiagramEditor"; public DiagramEditor() {
//2.为该编辑器设置编辑域。默认是其本身
setEditDomain(new DefaultEditDomain(this));
} @Override
protected PaletteRoot getPaletteRoot() {
// TODO Auto-generated method stub
return null;
} @Override
public void doSave(IProgressMonitor monitor) {
// TODO Auto-generated method stub } }

3.创建DiagramEditorInput

创建好Editor之后,还需要创建一个编辑器输入

(1)在包 gef.tutorial.step.ui.editor 下新建包 input

(2)在input包下创建编辑器输入类:DiagramEditorInput,扩展自IPathEditorInput接口

package gef.tutorial.step.ui.editor.input;

import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IPathEditorInput;
import org.eclipse.ui.IPersistableElement; public class DiagramEditorInput implements IPathEditorInput { private IPath path; public DiagramEditorInput(IPath path) {
this.path = path;
} @Override
public boolean exists() {
// TODO Auto-generated method stub
return path.toFile().exists();
} @Override
public ImageDescriptor getImageDescriptor() {
// TODO Auto-generated method stub
return null;
} @Override
public String getName() {
// TODO Auto-generated method stub
return path.toString();
} @Override
public IPersistableElement getPersistable() {
// TODO Auto-generated method stub
return null;
} @Override
public String getToolTipText() {
// TODO Auto-generated method stub
return null;
} @Override
public <T> T getAdapter(Class<T> adapter) {
// TODO Auto-generated method stub
return null;
} @Override
public IPath getPath() {
// TODO Auto-generated method stub
return path;
} @Override
public int hashCode(){
// TODO Auto-generated method stub
return path.hashCode();
} }

三、显示Editor

我们现在已经有一个编辑器了,既然需要实现点击菜单后选择文件后打开编辑器,那么就要将点击菜单的action 与 编辑器连接起来。

1.修改 DiagramAction

我们在打开文件对话框并获取到文件保存路径之后,再打开前面创建的编辑器

package gef.tutorial.step.action;

import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow; import gef.tutorial.step.app.Activator;
import gef.tutorial.step.constant.IImageConstant;
import gef.tutorial.step.ui.editor.DiagramEditor;
import gef.tutorial.step.ui.editor.input.DiagramEditorInput; /**
* DiagramAction
*
* @author shirayner
*
*/
public class DiagramAction extends Action {
private final IWorkbenchWindow window;
public final static String ID = "gef.tutorial.step.action.DiagramAction"; /**
* 一、在构造方法中设置基本属性
*
* @param window
*/
public DiagramAction(IWorkbenchWindow window) {
this.window = window; //1.定义该Action的ID. 每一个Action需要一个唯一的ID号
setId(ID); //2.设置该Action的文字。该文字也就是菜单上的文字。"@ALT+D"用来设置该Action的快捷键
setText("&Diagram@ALT+D"); //3.设置工具栏的提示文本
setToolTipText("Draw the GEF diagram."); //4.设置该Action的图片。该方法使用 AbstractUIPlugin 抽象类的 imageDescriptorFromPlugin() 方法快捷地获取图像。
//imageDescriptorFromPlugin()方法需要两个参数:项目ID、图片文件名。
setImageDescriptor(Activator.imageDescriptorFromPlugin( Activator.PLUGIN_ID, IImageConstant.EDITORTITLE)); } /**
* 二、在Run方法中设置要执行的动作。
* 单击菜单、工具栏图标按钮或者按键时会执行Action的run方法
*
*/
@Override
public void run() {
//1.打开文本对话框后,获取文件路径
String path = openFileDialog();
if (path != null) {
//弹出一个对话框
//MessageDialog.openInformation(window.getShell(), "温馨提示", "文件保存路径为:"+path); //2.根据文件路径,创建一个编辑器输入
IEditorInput input = new DiagramEditorInput(new Path(path)); //3.获取工作台页面
IWorkbenchPage page = window.getActivePage(); try{
//4.根据扩展点ID打开编辑器.
page.openEditor(input, DiagramEditor.ID,true); }catch(Exception e){
System.err.println(e);
} } } /** 打开一个文件对话框
*
* @return
* String 文件路径
*/
private String openFileDialog(){
FileDialog dialog = new FileDialog(window.getShell(),SWT.OPEN);
dialog.setText("文件保存到");
dialog.setFilterExtensions(new String[] { ".diagram" });
return dialog.open();
} }

四、运行效果

(1)运行插件,点击菜单或者工具栏

(2)出现下图文件对话框,选择保存文件的路径,然后点击打开

(3)出现一个带有调色板的空白编辑器

GEF入门实例_总结_05_显示一个空白编辑器的更多相关文章

  1. GEF入门实例_总结_03_显示菜单和工具栏

    一.前言 本文承接上一节: GEF入门实例_总结_02_新建初始RCP空项目 这一节,我们来给我们的插件加上菜单. 二.基础知识 1.action bar.menubar.coolbar   含义 a ...

  2. GEF入门实例_总结_06_为编辑器添加内容

    一.前言 本文承接上一节:GEF入门实例_总结_05_显示一个空白编辑器 在上一节我们为我们的插件添加了一个空白的编辑器,这一节我们将为此编辑器添加内容. 二.GEF的MVC模式 在此只简单总结一下, ...

  3. GEF入门实例_总结_04_Eclipse插件启动流程分析

    一.前言 本文承接上一节:GEF入门实例_总结_03_显示菜单和工具栏 注意到app目录下的6个类文件. 这6个文件对RCP应用程序而言非常重要,可能我们现在对这几个文件的理解还是云里雾里,这一节我们 ...

  4. GEF入门实例_总结_02_新建初始RCP空项目

    一.前言 本节承接上一节: GEF入门实例_总结_01_教程.源码.开发环境准备 这一节我们来创建一个空的RCP项目. 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入 ...

  5. GEF入门实例_总结_01_教程、源码、开发环境准备

    一.前言 最近在学Eclipse插件开发,发现了一个比较好的GEF入门教程,并且按照教程上的操作,一步步实现了一个入门Demo,在此感谢作者的贡献. 好记性不如烂笔头,故决定总结一下这段时间的学习心得 ...

  6. java web 入门实例servlet篇(显示后台数据库列表,删除某一条记录并显示)

    编写过程中需要注意的问题: 1.建立eclipse动态web工程时,需要改写编译后class文件的位置,通常情况下是这个位置:/WebContent/WEB-INF/classes 2.配置的页面链接 ...

  7. PyQt5显示一个空白的窗口

    效果如下图: """ In this example, we create a simple window in PyQt5. """ # ...

  8. Eclipse插件开发_学习_02_GEF入门实例

    一.前言 这一节,我们将会创建一个GEF入门实例 二.新建RCP项目 1. New 一个 Plug-in Project 2.输入项目名 项目名:com.ray.gef.helloworld 3.Co ...

  9. vue 快速入门 系列 —— 使用 vue-cli 3 搭建一个项目(下)

    其他章节请看: vue 快速入门 系列 使用 vue-cli 3 搭建一个项目(下) 上篇 我们已经成功引入 element-ui.axios.mock.iconfont.nprogress,本篇继续 ...

随机推荐

  1. Cocos2d-x3.0游戏实例之《别救我》第八篇——TiledMap实现关卡编辑器

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/musicvs/article/details/25368273 好吧.我真心全然搞不懂.我如今仅仅只 ...

  2. 剑指offer 面试49题

    面试49题: 题:丑数 题目:把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N ...

  3. PHP实现生成唯一编号(36进制的不重复编号)

    当我们要将一个庞大的数据进行编号时,而编号有位数限制,比如5位的车牌号.10位的某证件号码.订单流水号.短网址等等,我们可以使用36进制计算出符合位数的不重复的编号. 我们将0-Z(012345678 ...

  4. ABP框架数据迁移报错

    问题描述:将项目从TFS载下来  然后敲update-database 进行数据迁移 提示:Update-Database : 无法将“Update-Database”项识别为 cmdlet.函数.脚 ...

  5. php数组函数-array_pad()

    array_pad()函数向一个数组插入带有指定值的指定数量的元素. array_pad(array,size,value); array:必需.规定数组 size:必需.指定的长度.正数则填补到右侧 ...

  6. 第八篇、正则表达式 re模块

    一.常用匹配模式 #!/usr/bin/env python # -*- coding:utf-8 -*- import re #贪婪匹配:从后面开始 #()只需要提取括号中的内容,顺序从外到内 li ...

  7. groupby和agg的使用

    先来看一段代码: 分析下groupby和agg的联合使用: reset_index()表示重新设置索引 agg传进来的统计特征: 按照A这一列作聚合,C这一列作统计 注意:df = df.groupb ...

  8. HTML5 上传图片 到ASP.NET MVC

    @{ ViewBag.Title = "Home Page"; } <!DOCTYPE HTML PUBLIC> <html> <head> & ...

  9. Web项目java.lang.OutOfMemoryError: PermGen space异常解决

    接手一个新的Web项目,编译运行(Tomcat版本为7),运行的时候报出了java.lang.OutOfMemoryError: PermGen space的异常,搜了一下这样解释:   PermGe ...

  10. 如何判断Linux服务器是否被入侵?

    被入侵服务器的症状 当服务器被没有经验攻击者或者自动攻击程序入侵了的话,他们往往会消耗 100% 的资源.他们可能消耗 CPU 资源来进行数字货币的采矿或者发送垃圾邮件,也可能消耗带宽来发动 DoS ...