Eclipse 插件开发 5 编辑器

Eclipse 插件开发 5 编辑器

  • [1 编辑器描述](#1 编辑器描述)
  • [2 自定义编辑器](#2 自定义编辑器)
    • [2.1 注册插件(plugin.xml)](#2.1 注册插件(plugin.xml))
    • [2.2 继承 EditorPart](#2.2 继承 EditorPart)
    • [2.3 实现 IEditorInput](#2.3 实现 IEditorInput)
    • [2.4 打开编辑器](#2.4 打开编辑器)

1 编辑器描述

Eclipse 的 UI 基于 Workbench(工作台)模型,Editor Area 是 Workbench 的核心区域之一,用于显示各类"编辑器"界面。

编辑器区域与其他 UI 区域的关系

区域 描述
Editor Area 中心区域,用于显示 EditorPart(编辑器)
View(视图) 比如 Project Explorer、Outline、Console,围绕编辑器区域分布
Perspective 一组 View + Editor 的布局配置
Part 包括 ViewPart 和 EditorPart
WorkbenchPage 表示当前工作台页面,管理所有 View 和 Editor 的容器

编辑器(EditorPart)的特点

特点 描述
生命周期管理 Eclipse 管理打开、关闭、激活等
文件编辑能力 比如 Java、XML、Text 文件都是用 EditorPart 打开的
可嵌入 UI 组件 可以自定义控件(Composite、Label、Canvas、Table 等)
可响应拖放 可以注册 DropTarget 监听器
对比项 ViewPart EditorPart
所在区域 边栏区域 中心编辑器区域
关闭方式 可以一直打开 可关闭和切换
适合用途 项目结构、资源浏览器 资源编辑、图形设计
典型示例 Project Explorer, Console Java 编辑器、文本编辑器

2 自定义编辑器

2.1 注册插件(plugin.xml)

xml 复制代码
<extension point="org.eclipse.ui.editors">
  <editor
        id="com.xu.editor"
        name="CustEditor"
        class="com.xu.CustEditorPart"
        extensions="myext"
        default="true"/>
</extension>

2.2 继承 EditorPart

java 复制代码
package com.xu.test;

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 CustEditorPart extends EditorPart {

    private Composite composite;
	
	@Override
	public void doSave(IProgressMonitor arg0) {
		// TODO Auto-generated method stub		
	}

	@Override
	public void doSaveAs() {
		// TODO Auto-generated method stub
	}

	@Override
	public void init(IEditorSite arg0, IEditorInput arg1) throws PartInitException {
		setSite(arg0);
        setInput(arg1);
	}

	@Override
	public boolean isDirty() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isSaveAsAllowed() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void createPartControl(Composite composite) {
        this.composite = composite;

		composite.setLayout(new FillLayout(SWT.HORIZONTAL));
        
		Text text = new Text(composite, SWT.BORDER);
		text.setText("开始");
	}

	@Override
	public void setFocus() {
		composite.setFocus();
	}

}

2.3 实现 IEditorInput

防止打开多个编辑器

java 复制代码
package com.xu.test;

import java.util.Objects;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;

public class CustEditorInput implements IEditorInput {

	private final String id;

    public CustEditorInput(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }

    @Override
    public boolean exists() {
        return true;
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        return null;
    }

    @Override
    public String getName() {
        return id;
    }

    @Override
    public IPersistableElement getPersistable() {
        return null;
    }

    @Override
    public String getToolTipText() {
        return id;
    }

    @Override
    public <T> T getAdapter(Class<T> adapter) {
        return null;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj instanceof CustEditorInput) {
            return Objects.equals(this.id, ((CustEditorInput) obj).id);
        }
        return false;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

}

2.4 打开编辑器

java 复制代码
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
page.openEditor(new CustEditorInput("11111"), "com.xu.editor");
相关推荐
慕y27412 分钟前
Java学习第九十六部分——Eureka
java·学习·eureka
万能小锦鲤32 分钟前
《软件测试与质量控制》实验报告二 单元测试
junit·eclipse·单元测试·测试用例·实验报告·软件测试与质量控制
头发那是一根不剩了38 分钟前
信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
java·信创·tongweb
22:30Plane-Moon1 小时前
Servlet作用域,监听器,JSP九大内置对象
java·开发语言·servlet
小白(猿)员1 小时前
JVM、JDK、JRE的区别
java·开发语言·jvm
axban2 小时前
QT中删除控件的注意事项、deleteLater和delete的区别
java·数据库·qt
MicoZone2 小时前
JDK源码
java
Resean02232 小时前
SpringMVC 6+源码分析(二)DispatcherServlet实例化流程 1
java·spring boot·spring·servlet·springmvc
泉城老铁3 小时前
Spring Boot 对接阿里云 OSS 的详细步骤和流程
java·后端·程序员
陈平安安3 小时前
Maven学习
java·maven