Eclipse插件开发学习笔记【6】--- 添加编辑器

我们使用myfirstplugin的示例,我们在ViewList中的111,222,333的点击时分别打开三个不同的编辑器。

首先,我们在plugin.xml的扩展选项卡中点击添加,选择org.eclipse.ui.editors扩展点,点击完成。

右击扩展点新建两个editor,一共三个editor,属性如下图所示:

右键src文件夹,点击新建类,新建3个类非别为Editor1,Editor2,Editor3,继承EditorPart类。

在init和createPartControl函数中加入实现代码:

setSite(site);

setInput(input);

setPartName(input.getName());

setTitleImage(input.getImageDescriptor().createImage());

Composite topCom = new Composite(parent, SWT.NONE);

topCom.setLayout(new FillLayout());

new Text(topCom, SWT.MULTI).setText("编辑器1");

新建InputEditor1-3 3个类,实现IEditorInput接口。getImageDescriptor和getName方法加上如下代码:

return WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_DTOOL_NEW_FASTVIEW);

return "111";

在ViewList中加上如下代码:

list.addMouseListener(new MouseListener() {

@Override

public void mouseDoubleClick(MouseEvent e) {

IEditorInput input = null;

String id = null;

switch (list.getSelection()[0]) {

case "111":

input = input1;

id = "myfirstplugin.editors.Editor1";

break;

case "222":

input = input2;

id = "myfirstplugin.editors.Editor2";

break;

case "333":

input = input3;

id = "myfirstplugin.editors.Editor3";

break;

}

if(input == null || id == null)

return;

IEditorPart  editor = getSite().getPage().findEditor(input);

if(editor != null){

getSite().getPage().bringToTop(editor);

}

else{

try {

getSite().getPage().openEditor(input, id);

} catch (Exception e2) {

e2.printStackTrace();

}

}

}

@Override

public void mouseDown(MouseEvent e) {

// TODO 自动生成的方法存根

}

@Override

public void mouseUp(MouseEvent e) {

// TODO 自动生成的方法存根

}

});

点击运行,效果如图:

package myfirstplugin.views;

import myfirstplugin.editors.InputEditor1;
import myfirstplugin.editors.InputEditor2;
import myfirstplugin.editors.InputEditor3;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.part.ViewPart;

public class ViewList extends ViewPart {

	private InputEditor1 input1 = new InputEditor1();
	private InputEditor2 input2 = new InputEditor2();
	private InputEditor3 input3 = new InputEditor3();

    public void createPartControl(Composite parent) {
        // TODO Auto-generated method stub
        Composite topCom = new Composite(parent,SWT.NONE);
        topCom.setLayout(new FillLayout());
        final List list = new List(topCom,SWT.BORDER);
        list.add("111");
        list.add("222");
        list.add("333");
        list.addSelectionListener(new SelectionAdapter(){
            public void widgetSelected(SelectionEvent e) {
                IWorkbenchPage wbp = getViewSite().getPage();
                IViewPart View1 = wbp.findView("myfirstplugin.views.ViewText");
                ViewText v1 = (ViewText)View1;
                if(View1 == null)return;
                Text text = v1.getText();
                text.setText(list.getSelection()[0] + "\n");
            }
        });

        list.addMouseListener(new MouseListener() {

			@Override
			public void mouseDoubleClick(MouseEvent e) {

				IEditorInput input = null;
				String id = null;

				switch (list.getSelection()[0]) {
				case "111":
					input = input1;
					id = "myfirstplugin.editors.Editor1";
					break;
				case "222":
					input = input2;
					id = "myfirstplugin.editors.Editor2";
					break;
				case "333":
					input = input3;
					id = "myfirstplugin.editors.Editor3";
					break;
				}

				if(input == null || id == null)
					return;

				IEditorPart  editor = getSite().getPage().findEditor(input);

				if(editor != null){
					getSite().getPage().bringToTop(editor);
				}
				else{
					try {
						getSite().getPage().openEditor(input, id);
					} catch (Exception e2) {
						e2.printStackTrace();
					}
				}
			}

			@Override
			public void mouseDown(MouseEvent e) {
				// TODO 自动生成的方法存根

			}

			@Override
			public void mouseUp(MouseEvent e) {
				// TODO 自动生成的方法存根

			}
		});
    }

    public void setFocus() {
        // TODO Auto-generated method stub

    }

}

package myfirstplugin.editors;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;

public class Editor1 extends EditorPart {

	@Override
	public void doSave(IProgressMonitor monitor) {
		// TODO 自动生成的方法存根

	}

	@Override
	public void doSaveAs() {
		// TODO 自动生成的方法存根

	}

	@Override
	public void init(IEditorSite site, IEditorInput input)
			throws PartInitException {
		setSite(site);
		setInput(input);
		setPartName(input.getName());
		setTitleImage(input.getImageDescriptor().createImage());
	}

	@Override
	public boolean isDirty() {
		// TODO 自动生成的方法存根
		return false;
	}

	@Override
	public boolean isSaveAsAllowed() {
		// TODO 自动生成的方法存根
		return false;
	}

	@Override
	public void createPartControl(Composite parent) {
		Composite topCom = new Composite(parent, SWT.NONE);
		topCom.setLayout(new FillLayout());

		new Text(topCom, SWT.MULTI).setText("编辑器1");
	}

	@Override
	public void setFocus() {
		// TODO 自动生成的方法存根

	}

}

package myfirstplugin.editors;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.win32.INPUT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;

public class Editor2 extends EditorPart{

	@Override
	public void doSave(IProgressMonitor monitor) {
		// TODO 自动生成的方法存根

	}

	@Override
	public void doSaveAs() {
		// TODO 自动生成的方法存根

	}

	@Override
	public void init(IEditorSite site, IEditorInput input)
			throws PartInitException {
		setSite(site);
		setInput(input);
		setPartName(input.getName());
		setTitleImage(input.getImageDescriptor().createImage());
	}

	@Override
	public boolean isDirty() {
		// TODO 自动生成的方法存根
		return false;
	}

	@Override
	public boolean isSaveAsAllowed() {
		// TODO 自动生成的方法存根
		return false;
	}

	@Override
	public void createPartControl(Composite parent) {
		Composite topCom = new Composite(parent, SWT.NONE);
		topCom.setLayout(new FillLayout());

		new Text(topCom, SWT.MULTI).setText("编辑器2");
	}

	@Override
	public void setFocus() {
		// TODO 自动生成的方法存根

	}

}

package myfirstplugin.editors;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;

public class Editor3 extends EditorPart{

	@Override
	public void doSave(IProgressMonitor monitor) {
		// TODO 自动生成的方法存根

	}

	@Override
	public void doSaveAs() {
		// TODO 自动生成的方法存根

	}

	@Override
	public void init(IEditorSite site, IEditorInput input)
			throws PartInitException {
		setSite(site);
		setInput(input);
		setPartName(input.getName());
		setTitleImage(input.getImageDescriptor().createImage());
	}

	@Override
	public boolean isDirty() {
		// TODO 自动生成的方法存根
		return false;
	}

	@Override
	public boolean isSaveAsAllowed() {
		// TODO 自动生成的方法存根
		return false;
	}

	@Override
	public void createPartControl(Composite parent) {
		Composite topCom = new Composite(parent, SWT.NONE);
		topCom.setLayout(new FillLayout());

		new Text(topCom, SWT.MULTI).setText("编辑器3");
	}

	@Override
	public void setFocus() {
		// TODO 自动生成的方法存根

	}

}

package myfirstplugin.editors;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.help.WorkbenchHelp;
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
import org.eclipse.ui.internal.WorkbenchImages;

public class InputEditor1 implements IEditorInput {

	@Override
	public Object getAdapter(Class adapter) {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public boolean exists() {
		// TODO 自动生成的方法存根
		return true;
	}

	@Override
	public ImageDescriptor getImageDescriptor() {
		// TODO 自动生成的方法存根
		return WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_DTOOL_NEW_FASTVIEW);
	}

	@Override
	public String getName() {
		// TODO 自动生成的方法存根
		return "111";
	}

	@Override
	public IPersistableElement getPersistable() {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public String getToolTipText() {
		// TODO 自动生成的方法存根
		return null;
	}

}

package myfirstplugin.editors;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
import org.eclipse.ui.internal.WorkbenchImages;

public class InputEditor2 implements IEditorInput {

	@Override
	public Object getAdapter(Class adapter) {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public boolean exists() {
		// TODO 自动生成的方法存根
		return true;
	}

	@Override
	public ImageDescriptor getImageDescriptor() {
		// TODO 自动生成的方法存根
		return WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_EDITOR_TRIMPART);
	}

	@Override
	public String getName() {
		// TODO 自动生成的方法存根
		return "222";
	}

	@Override
	public IPersistableElement getPersistable() {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public String getToolTipText() {
		// TODO 自动生成的方法存根
		return null;
	}

}

package myfirstplugin.editors;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
import org.eclipse.ui.internal.IWorkbenchGraphicConstants;
import org.eclipse.ui.internal.WorkbenchImages;

public class InputEditor3 implements IEditorInput {

	@Override
	public Object getAdapter(Class adapter) {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public boolean exists() {
		// TODO 自动生成的方法存根
		return true;
	}

	@Override
	public ImageDescriptor getImageDescriptor() {
		// TODO 自动生成的方法存根
		return WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_EXPORT_WIZ);
	}

	@Override
	public String getName() {
		// TODO 自动生成的方法存根
		return "333";
	}

	@Override
	public IPersistableElement getPersistable() {
		// TODO 自动生成的方法存根
		return null;
	}

	@Override
	public String getToolTipText() {
		// TODO 自动生成的方法存根
		return null;
	}

}

  

时间: 2024-10-25 02:33:26

Eclipse插件开发学习笔记【6】--- 添加编辑器的相关文章

Eclipse插件开发 学习笔记 PDF 第一篇到第四篇 免分下载 开发基础 核心技术 高级进阶 综合实例

<<Eclipse插件开发 学习笔记>>,本书由浅入深.有重点.有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章.第一篇介绍Eclipse平台界面开发的基础知识.包含SWT控件的使用.界面布局.事件处理等内容:第二篇是插件开发核心技术,主要介绍插件开发的核心知识要点,包含行为(Action).视图(ViewPart).编辑器(Editor).透视图(Perspective)等10章的内容.第三篇主要讲述插件开发的高级内容,包含开发高级内容.富client平台技术(R

eclipse插件开发学习笔记

2016-09-01 17:11:50 1. 概述 1.1 SWT/JFace 是Eclipse 的基础,Eclipse 的 Workbench 就是建立在 SWT/JFace 之上的.另外,JFace 是在 SWT 之上开发的,它和 SWT 形成一个交集, 其中 SWT 提供最原始的组件,如下图所示 JFace是在SWT的基础上创建的,但JFace并不能完全覆盖SWT的功能 这两个图下面那个应该是对的,上面那个有点问题吗? 1.2 SWT是一个库,依赖于本机操作系统的库,会体现主机的GUI库特

Eclipse插件开发学习笔记【3】--- 添加视图和透视图

一.添加视图 视图是Eclipse插件开发中一个重要的扩展点,我们需要做的是在Eclipse插件项目中插入一个视图. 首先,新建一个插件项目,命名为addView,选择Hello Word模板,其他默认设置. 包结构如图所示: 双击plugin.xml文件,选择扩展选项卡,点击添加org.eclipse.ui.views扩展点. 右键新建一个category和view属性如图所示: 右键src添加类,输入类名FirstView,继承超类ViewPart,包addperspective.views

Eclipse插件开发学习笔记【5】--- 给视图添加下拉菜单和按钮

我们采用上篇中的示例,需要在View2中添加两个按钮和下拉菜单中添加两项. 首先,新建一个继承ActionGroup类,AddActionGroup,具体代码如下: /** ************************************ AddActionGroup类 **/ package viewsconnection.actions; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.I

Eclipse插件开发学习笔记【7】--- 添加首选项

首先,我们新建一个插件项目,打开plugin.xml文件选择扩展选项卡,添加一个org.eclipse.ui.preferencePages扩展点,并再添加一个page按照图中所示配置,注意第二个page的category为第一个page的id. 右键src文件夹,点击新建类,新建2个类分别为Page1,Page2,继承PreferencePage类,实现IWorkbenchPreferencePage接口. /** * * Page1 * */ package addpreferencepag

linux学习笔记--vim程序编辑器

1,在linux系统中使用文本编辑器来编辑自己的linux参数配置文件是一件很重要的事情,因此系统管理员至少应该要熟悉一种文本编辑器. 2,不同的linux distribution各有不同的附加软件,linux命令行界面下的文本编辑器有Emacs,pico,nano,joe与vim 3,学习vim的重要性 (1)所有的UNIX Like系统都内置vi文本编辑器,其他的文本编辑器不一定存在 (2)很多软件的编辑接口都会主动调用vi (3)vim具有程序编辑的能力,可以主动以字体颜色辨别语法的正确

R语言可视化学习笔记之添加p-value和显著性标记

R语言可视化学习笔记之添加p-value和显著性标记 http://www.jianshu.com/p/b7274afff14f?from=timeline 上篇文章中提了一下如何通过ggpubr包为ggplot图添加p-value以及显著性标记,本文将详细介绍.利用数据集ToothGrowth进行演示 #先加载包 library(ggpubr) #加载数据集ToothGrowth data("ToothGrowth") head(ToothGrowth) ## len supp do

网络运维学习笔记:vim编辑器及 bash特性

在本周学习中我们学习了vim编辑器的用法及对bash特性的简单了解,下面我们分别来解释这些内容. 一.vim编辑器 1.使用vim编辑器同时编辑多个文件时: vim FILE1 FILE2 FILE3 ........ 其中:next 查看或编辑后一个文档的内容 :prev 查看或编辑前一个文档的内容 :first 查看或编辑第一个文档的内容 :last 查看或编辑最后一个文档的内容 2.vim -o 分屏显示多个文档内容 横屏 vim -O 分屏显示多个文档内容 竖屏 Ctrl+w,s 将一个

Eclipse IDE学习笔记

For Eclipse plug-in Project 快捷键 方法提示: alt+/删除: ctrl+Dundo: ctrl+Zredo: ctrl+Ysource提示: alt+shift+Scomment: ctrl+/comment: ctrl+shift+/ 1.Menu(菜单栏) File New(新建工程) new plug-in project Project-->Plug-in Development-->Plug-in Project "Would you lik