RCP表单编辑器---》一、打开编辑器
1、创建JsEditor.java
package com.testrcp.myrcp.editors;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;
public class JsEditor extends EditorPart{
//对应plugin.xml指定的id
public static final String ID = "com.testrcp.myrcp.editors.JsEditor";
private Text text;
//编辑器中的内容是否被修改的标志
private boolean bDirty = false;
public JsEditor() {
super();
}
//初始化编辑器
public void init(IEditorSite site, IEditorInput input)throws PartInitException{
this.setSite(site);//设置site
this.setInput(input);//设置输入的IEditorInput对象
this.setPartName(input.getName());//设置编辑器上方显示的名称
}
//创建编辑器中的控件
public void createPartControl(Composite parent) {
text = new Text(parent, SWT.NONE);
//当文本框修改时,设定内容被修改过
text.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (!isDirty()) {//如果未修改
setDirty(true);//设置修改
//更改编辑器的状态
firePropertyChange(IEditorPart.PROP_DIRTY);
}
}
});
}
//编辑器关闭时,保存编辑器内容时所调用的方法
public void doSave(IProgressMonitor monitor) {
//将保存状态显示在状态栏中
try {
monitor.beginTask("保存文件...", 100);
for (int i = 0; i < 10 && !monitor.isCanceled(); i++) {
Thread.sleep(500);
monitor.worked(10);
double d = (i + 1) / 10d;
monitor.subTask("已完成" + d * 100 + "%");// 显示任务状态
}
monitor.done();
if (monitor.isCanceled()){
throw new InterruptedException("取消保存");
}
}catch (InterruptedException e) {
}
}
//另存为调用的方法
public void doSaveAs() {
}
//判断是否被修改过
public boolean isDirty() {
return bDirty;
}
//是否允许保存
public boolean isSaveAsAllowed() {
return true;
}
//设置焦点
public void setFocus() {
text.setFocus();
}
//设置编辑器内容被修改过
public void setDirty(boolean b) {
bDirty = b;
}
2、创建JsEditorInput.java
package com.testrcp.myrcp.editors;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
import formeditorrcp.Activator;
public class JsEditorInput implements IEditorInput {
//输入的字符
private String input ;
public JsEditorInput ( String input ){
this.input = input ;
}
//是否将编辑器保存在最近访问记录中
public boolean exists() {
return true;
}
//输入内容的图标
public ImageDescriptor getImageDescriptor() {
return Activator.getImageDescriptor("icons/samples.gif");
}
//输入信息的名称
public String getName() {
return input;
}
//是否可以持久化该编辑器
public IPersistableElement getPersistable() {
return null;
}
//设置编辑器标签中显示提示信息
public String getToolTipText() {
return input;
}
//返回与该输入相关的类的对象
public Object getAdapter(Class adapter) {
return null;
}
}
3、创建OpenEditorView.java
package com.testrcp.myrcp.views;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.List;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.internal.part.NullEditorInput;
import org.eclipse.ui.part.ViewPart;
import com.testrcp.myrcp.editors.JsEditor;
import com.testrcp.myrcp.editors.JsEditorInput;
public class OpenEditorView extends ViewPart {
public static final String ID = "com.testrcp.myrcp.views.OpenEditorView";
public List list;
public OpenEditorView() {
super();
}
public void createPartControl(Composite parent) {
list = new List(parent, SWT.NONE);
list.add("Editor");
list.add("MutiPage Editor");
list.add("Form Editor");
list.add("Master/Detail Page");
list.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
String select = list.getSelection()[0];
// 获得当前激活的IWorkbenchPage对象
IWorkbenchPage page = getViewSite().getWorkbenchWindow().getActivePage();
try {
if (select.equals("Editor")) {// 如果选中的"Editor"一项
// 创建输入的内容对象
JsEditorInput editor = new JsEditorInput(select);
// 打开该编辑器
page.openEditor(editor, JsEditor.ID);
}else if (select.equals("MutiPage Editor")) {
//page.openEditor(new NullEditorInput(), MutiEditorSample.ID);
}else if (select.equals("Form Editor")) {// 如果选中的"Editor"一项
//page.openEditor(new NullEditorInput(), MyMutiForm.ID);
}
}catch (PartInitException ee) {
ee.printStackTrace();
}
}
});
}
public void setFocus() {
list.setFocus();
}
}
4、在plugin.xml中增加如下代码
<extension point="org.eclipse.ui.views"> <view allowMultiple="false" class="com.testrcp.myrcp.views.OpenEditorView" icon="icons/alt_window16.gif" id="com.testrcp.myrcp.views.OpenEditorView" name="打开编辑器"/> </extension>
5、在透视图中,增加如下代码
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
//添加树视图
layout.addView(OpenEditorView.ID, IPageLayout.LEFT, 0.2f, editorArea);
}
6、效果如图:

7、获取源码
链接:https://pan.baidu.com/s/1GjtxKitstcsdX2HvBSfJAg
提取码:oeah

浙公网安备 33010602011771号