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");
相关推荐
阿蒙Amon11 分钟前
C#每日面试题-Thread.Sleep和Task.Delay的区别
java·数据库·c#
Haooog12 分钟前
AI应用代码生成平台
java·学习·大模型·langchain4j
爬山算法25 分钟前
Hibernate(67)如何在云环境中使用Hibernate?
java·后端·hibernate
黎雁·泠崖36 分钟前
Java抽象类与接口:定义+区别+实战应用
java·开发语言
2301_7925800039 分钟前
xuepso
java·服务器·前端
露天赏雪1 小时前
Java 高并发编程实战:从线程池到分布式锁,解决生产环境并发问题
java·开发语言·spring boot·分布式·后端·mysql
夏幻灵1 小时前
面向对象编程综合实战
java
NMIXX爻1 小时前
线程控制 下
java·开发语言·jvm
时艰.2 小时前
JVM 垃圾收集器(G1&ZGC)
java·jvm·算法
iRuriCatt2 小时前
智慧景区管理系统 | 计算机毕设项目
java·前端·spring boot·vue·毕设