1.6. 编辑器
请更改Perspective.java示你的编辑器区域可见。
package rcp.intro.editor;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
public class Perspective implements IPerspectiveFactory {
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
layout.setEditorAreaVisible(true);
layout.setFixed(true);
layout.addStandaloneView(View.ID, false, IPageLayout.LEFT, 1.0f,
editorArea);
}
}
在包“rcp.intro.editor.editors”创建一个新类“MyPersonEditorInput”并扩展为IEditorInput。 IEditorInput是编辑器的模型。
建议重写equals和hashCode方法等于实施一个IEditor。 equals方法的基础上,系统会确定相应的编辑器已打开与否。
创建的代码更改为以下。
package rcp.intro.editor.editors;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
import rcp.intro.editor.model.Person;
public class MyPersonEditorInput implements IEditorInput {
private final Person person;
public MyPersonEditorInput(Person person) {
this.person = person;
}
public Person getPerson() {
return person;
}
@Override
public boolean exists() {
return false;
}
@Override
public ImageDescriptor getImageDescriptor() {
return null;
}
@Override
public String getName() {
return person.toString();
}
@Override
public IPersistableElement getPersistable() {
return null;
}
@Override
public String getToolTipText() {
return person.toString();
}
@Override
public Object getAdapter(Class adapter) {
return null;
}
@Override
public boolean equals(Object obj) {
if (super.equals(obj)) {
return true;
}
if (obj instanceof MyPersonEditorInput) {
return person.equals(((MyPersonEditorInput) obj).getPerson());
}
return false;
}
@Override
public int hashCode() {
return person.hashCode();
}
}
1.8. 添加编辑器
转到plugin.xml中,选择选项卡扩展。添加扩展org.eclipse.ui.editors。不要使用模板。使用ID“rcp.intro.editor.editors.MyPersonEditor”,或者任何您想要的名称和类“rcp.intro.editor.editors.MyPersonEditor”。
注:也请一定要选择一个图标!否则你的编辑器将无法工作。
在点击链接的类创建类。创建下面的类。重要的是类变量“ID”后,我们将使用这个类来引用。该变量ID必须匹配在编辑器扩展中定义的ID。
package rcp.intro.editor.editors;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
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;
import rcp.intro.editor.model.Person;
public class MyPersonEditor extends EditorPart {
public static final String ID = "rcp.intro.editor.editors.MyPersonEditor";
private Person person;
private Text text2;
public MyPersonEditor() {
}
@Override
public void doSave(IProgressMonitor monitor) {
person.getAddress().setCountry(text2.getText());
}
@Override
public void doSaveAs() {
}
@Override
public void init(IEditorSite site, IEditorInput input)
throws PartInitException {
setSite(site);
setInput(input);
person = ((MyPersonEditorInput) input).getPerson();
setPartName(person.getFirstName());
}
@Override
public boolean isDirty() {
if (person.getAddress().getCountry().equals(text2.getText())) {
return false;
}
return true;
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
@Override
public void createPartControl(Composite parent) {
GridLayout layout = new GridLayout();
layout.numColumns = 2;
parent.setLayout(layout);
Label label1 = new Label(parent, SWT.BORDER);
label1.setText("Person: ");
Label personName = new Label(parent, SWT.BORDER);
personName.setText(person.toString());
Label label2 = new Label(parent, SWT.BORDER);
label2.setText("Country");
text2 = new Text(parent, SWT.BORDER);
text2.setText(person.getAddress().getCountry());
}
@Override
public void setFocus() {
}
}
(版权归原作者所有)