Eclipse的编辑器查看的相互作用(3)

本文介绍如何在Eclipse RCP应用中创建自定义编辑器,包括配置视角、实现IEditorInput接口及创建编辑器类。通过具体示例展示如何使编辑器能够显示并编辑Person对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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() {
     }
   
    }

 

 

(版权归原作者所有)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值