当前位置: 首页 > news >正文

Eclipse 插件开发 5 编辑器

Eclipse 插件开发 5 编辑器

  • 1 编辑器描述
  • 2 自定义编辑器
    • 2.1 注册插件(plugin.xml)
    • 2.2 继承 EditorPart
    • 2.3 实现 IEditorInput
    • 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 监听器
对比项ViewPartEditorPart
所在区域边栏区域中心编辑器区域
关闭方式可以一直打开可关闭和切换
适合用途项目结构、资源浏览器资源编辑、图形设计
典型示例Project Explorer, ConsoleJava 编辑器、文本编辑器

2 自定义编辑器

2.1 注册插件(plugin.xml)

<extension point="org.eclipse.ui.editors"><editorid="com.xu.editor"name="CustEditor"class="com.xu.CustEditorPart"extensions="myext"default="true"/>
</extension>

2.2 继承 EditorPart

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;@Overridepublic void doSave(IProgressMonitor arg0) {// TODO Auto-generated method stub		}@Overridepublic void doSaveAs() {// TODO Auto-generated method stub}@Overridepublic void init(IEditorSite arg0, IEditorInput arg1) throws PartInitException {setSite(arg0);setInput(arg1);}@Overridepublic boolean isDirty() {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean isSaveAsAllowed() {// TODO Auto-generated method stubreturn false;}@Overridepublic void createPartControl(Composite composite) {this.composite = composite;composite.setLayout(new FillLayout(SWT.HORIZONTAL));Text text = new Text(composite, SWT.BORDER);text.setText("开始");}@Overridepublic void setFocus() {composite.setFocus();}}

2.3 实现 IEditorInput

防止打开多个编辑器

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;}@Overridepublic boolean exists() {return true;}@Overridepublic ImageDescriptor getImageDescriptor() {return null;}@Overridepublic String getName() {return id;}@Overridepublic IPersistableElement getPersistable() {return null;}@Overridepublic String getToolTipText() {return id;}@Overridepublic <T> T getAdapter(Class<T> adapter) {return null;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj instanceof CustEditorInput) {return Objects.equals(this.id, ((CustEditorInput) obj).id);}return false;}@Overridepublic int hashCode() {return Objects.hash(id);}}

2.4 打开编辑器

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
page.openEditor(new CustEditorInput("11111"), "com.xu.editor");

在这里插入图片描述

相关文章:

  • 【优化策略】离散化
  • 项目改 pnpm 并使用 Monorepo 发布至 npm 上
  • Python----神经网络(《Going deeper with convolutions》论文解读和GoogLeNet网络)
  • gitignore的相关用法
  • 51单片机快速成长路径
  • Spring MVC中Controller是如何把数据传递给View的?
  • 2025ISCC练武校级赛部分题解WP
  • (1-1)Java的JDK、JRE、JVM三者间的关系
  • 可视化魔法指南
  • 如何检查 Watchtower 是否正常工作及更新未生效的排查方法【日常排错】
  • C语言学习之字符函数和字符串函数
  • 2025年五一假期旅游市场新趋势:理性消费、多元场景与科技赋能
  • C#管道通讯及传输信息丢失的原因
  • 信息革命对经济、货币体系及权力结构的颠覆性影响
  • 深入了解linux系统—— 进程控制
  • 虚拟现实(VR)与增强现实(AR)在教育领域的应用:开启沉浸式学习新时代
  • 006 yum和Linux生态
  • 可执行文件格式(ELF格式)以及进程地址空间第二讲【Linux操作系统】
  • 精益数据分析(46/126):深入剖析用户生成内容(UGC)商业模式
  • 各地级市儒家学校、学堂、孔庙数据
  • 梅花奖在上海|湘剧《夫人如见》竞梅,长沙文旅来沪推广
  • 中欧互动中的合作与分歧:务实需求将克服泛安全化的“政治钟摆”
  • 车建兴被留置:跌落的前常州首富和红星系重整迷路
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》
  • 与总书记交流的上海人工智能实验室年轻人,在探索什么前沿领域?