EclipsePlug-in添加编辑器.

plugin.xml:

 <extension
         point="org.eclipse.ui.editors">
         <editor
            class="com.xt.editors.TestEditor"
            default="true"
            extensions="TestEditor"
            filenames="TestEditor"
            id="com.xt.editors.TestEditor"
            name="测试编辑器">
     	</editor>
<extension>

Editor页面:

package com.xt.editors;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.ISaveablePart2;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.forms.editor.FormEditor;
import com.xt.dialog.Message;

/**
 * 
 * 类说明: Form编辑器.
 * @author 小天__ 2013-7-16 上午10:44:07
 */
public class TestEditor extends FormEditor implements ISaveablePart2{
	
	public static final String ID = "com.xt.editors.TestEditor";
	
	/**页面引用**/
	private CreateUnitEditorPage page;

	@Override
	protected void addPages() {
		try {
			page = new CreateUnitEditorPage(this, "TestEditor", "属性"); //此名字为左下的名字.
			addPage(page);
		} catch (PartInitException e) {
			e.printStackTrace();
		}
		updateTitle();
	}

	private void updateTitle() {
		IEditorInput input = getEditorInput();
		setPartName(input.getName());
		setTitleToolTip(input.getToolTipText());
	}

	@Override
	public void doSave(IProgressMonitor monitor) {
		System.out.println("保存成功");
		//保存成功.修改属性.
		page.setDirty(false);
		page.getManagedForm().staleStateChanged();
		editorDirtyStateChanged();
	}

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

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

	@Override
	public int promptToSaveOnClose() {	//退出时会调用.	返回0会调用上面的保存方法.返回1则不会调用.真接退出.
		if(page.isDirty()) {	//修改过.
			int result = Message.showConfirmMessage("是否保存后再退出?", page.getManagedForm().getForm().getShell());
			if(result == SWT.YES) {	//保存后退出.
				return 0;
			} else {
				return 1;
			}
		} else {
			return 1;
		}
	}
	
	@Override
	protected void pageChange(int newPageIndex) {
		super.pageChange(newPageIndex);
	}
	
}

Page页面:

package com.xt.editors;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;

public class CreateUnitEditorPage extends FormPage {

	private Text unitName;

	/**是否保存**/
	private boolean dirty = false;
	
	/**窗口引用**/
	private IManagedForm managedForm;
	
	/**input对象, 可以获取Input里的属性**/
	private UserOrganEditorInput input;
	
	public CreateUnitEditorPage(FormEditor editor, String id, String title) {
		super(editor, id, title);
	}
	
	@Override
	protected void createFormContent(final IManagedForm managedForm) {
		this.managedForm = managedForm;
		this.input = (UserOrganEditorInput)this.getEditorInput();
		this.userID = input.getId();
		
		managedForm.getForm().getBody().setLayout(new FillLayout(SWT.HORIZONTAL));
		FormToolkit toolkit = managedForm.getToolkit();
		ScrolledForm form = managedForm.getForm();
		toolkit.decorateFormHeading(form.getForm());
		toolkit.paintBordersFor(managedForm.getForm().getBody());
		managedForm.getForm().setText("单位信息");
		
		Composite composite = new Composite(managedForm.getForm().getBody(), SWT.NONE);
		managedForm.getToolkit().adapt(composite);
		managedForm.getToolkit().paintBordersFor(composite);
		composite.setLayout(new FormLayout());
		
		/**添加两个控件**/
		Label label = new Label(composite, SWT.NONE);
		FormData fd_label = new FormData();
		fd_label.top = new FormAttachment(0, 15);
		fd_label.left = new FormAttachment(0, 45);
		label.setLayoutData(fd_label);
		managedForm.getToolkit().adapt(label, true, true);
		label.setText("测试:");
		
		FormData fd_text_1 = new FormData();
		fd_text_1.left = new FormAttachment(label, 6);
		fd_text_1.top = new FormAttachment(label, -3, SWT.TOP);
		fd_text_1.right = new FormAttachment(60, 0);
		unitName.setLayoutData(fd_text_1);
		managedForm.getToolkit().adapt(unitName, true, true);

////////////////////////为控件添加修改事件/////////////////////////////
		unitName.addModifyListener(new ModifyListener(){
            @Override
            public void modifyText(ModifyEvent e) {
            	dirty = true;	//设置为脏状态.好用于保存.	编辑器标签上出现的星号.
            	managedForm.dirtyStateChanged();	
            }
        });
	}
	
	@Override
	public boolean isDirty() {
		return dirty;
	}
	
	public void setDirty(boolean dirty) {
		this.dirty = dirty;
	}

}


EditorInput:

package com.xt.editors;

import org.eclipse.core.resources.IFile;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;

/**
 * 
 * 类说明: 文本编辑器类.
 * @author LYQ 2013-7-16 上午10:21:25
 */
public class UserOrganEditorInput implements IEditorInput {

	/**编辑器名称**/
	private String name;
	
	/**编辑器ID**/
	private String id;
	
	/**构造方法可自行修改**/
	public UserOrganEditorInput(String name, String id) {
		this.name = name;
		this.id = id;
	}
	
	@Override
	public Object getAdapter(Class adapter) {
		if(adapter.equals(IFile.class)){
			return this;
		}else{
			return null;
		}
	}

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

	@Override
	public ImageDescriptor getImageDescriptor() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public String getName() {	//获取编辑器上方面字
		return name;
	}

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

	@Override
	public String getToolTipText() {
		return name;
	}
	
	@Override
	public boolean equals(Object obj) {	//重写equals方法.  返回 true:激活当前已打开的页面. false:则重新打开一个页面.
		if(obj instanceof UserOrganEditorInput){
			UserOrganEditorInput input = (UserOrganEditorInput)obj; 
			return ((input).getName()).equals(this.getName()) && input.getId().equals(this.getId());
		}
		return false;
	}

	public String getId() {
		return id;
	}

}



打开编辑器页面可写在菜单点, 某个控件的事件里:

IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();	//打开一个空白页.
TestEditorInput input = new TestEditorInput("测试编辑器", "1");	//后面的为ID.
try {
	page.openEditor(input, TestEditor.ID);
} catch (PartInitException e1) {
	e1.printStackTrace();
}





你可能感兴趣的:(EclipsePlug-in添加编辑器.)