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");
相关推荐
专业程序开发源1 分钟前
springboot外卖系统94294-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Moshow郑锴2 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
\光辉岁月/11 小时前
5.java-数组
java·开发语言
谢亮_vipxieliang11 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
郑州光合科技余经理11 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
2601_9620715711 小时前
类变量和全局变量的生命周期有什么区别?
java·开发语言·jvm
code2cat12 小时前
Java进阶篇之AtomicReference:一次替换引用,读到一份完整状态
java·并发编程·不可变对象·atomicreference
专业程序开发源12 小时前
springboot简历管理系统81389-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
Wang's Blog12 小时前
Java 项目实战: 外卖平台优化-前后端分离开发模式与工程拆分
java·开发语言