1.一个编辑器要对应一个IEditorInput和EditorPart。IWorkbenchPage是根据IEditorInput取得EditorPart的。 在通常的应用中,通用是在表格或者树中双击结点然后打开编辑器进行编辑。这时候,针对一个结点最多只能有一个编辑器出现,即如果 针对某个结点已经打开了编辑器,这时候就不应该再打开一个编辑器,而应该将已经打开的编辑器置顶,"置顶"在这里指将编辑器激活。 通常有2种做法,方法一是针对IEditorInput制造一个单例,这样自始至终都只会有一个IEditorInput,这样也可以保证EditorPart仅有一个。 当然这种方法感觉有点怪。 我个人喜欢用第二种方法,因为比较自然。方法二,可以这样做,在生成树或表格时,也设置该结点的IEditorInput, 即针对结点类型,增加2个方法,setInput(IEditorInput input)和getInput()。这样在双击结点时,input直接从结点中去获取。这样也可以保证只打开一个 编辑器。 2.编辑器的加载 编辑器的加载是通过IWorkbenchPage的openEditor(IEditorInput input,String editorId)来实现的 3.编辑器的置顶。直接看代码 IWorkbenchPage wpg = getViewSite().getPage(); IEditorpart editorPart = wpgfindEdiotr(entry.getInput());//entry为结点所对应的类型 //如果此编辑器已经存在,则将它设为当前的编辑器(最顶端),否则重新打开一个编辑器 if(editorpart != null){ wpg.bringToTop(editorPart); }else{ try{ wpg.openEditor(entry.getInput(),MyEdiotr.ID); //如果需要取得EditorPart的实例进行一些操作,那么可以这样做 MyEditor myEidtor = (MyEditor)wpg.openEditor(entry.getInput(),MyEdiotr.ID);//注意强制转型 //取得myEditor实例后就可以进行各种自己想要进行的操作啦 }catch(PartInitException e){ e.printStackTrace(); } } 5.IEditorInput的方法说明 ①public boolean exists(){ return true;//返回true,则打开该编辑器后它出现在Eclipse主菜单"文件"最下面的最近打开的文档栏中。返回false则不出现在其中 } ②public ImageDescriptor getImageDescriptor(){ return WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstans.IMG_ETOOL_HOME_NAV); } 编辑器标题栏的图标,不过它还需要在编辑器中用setTitleImage方法设置,才能出现在标题栏中 如:setTitleImage(input.getImageDescriptor().createImage()); ③public String getName(); 编辑器标题栏的显示名称,和上面的getImageDescriptor一样也要在EditorPart中有setPartName()方法设置,才能出现在标题栏中,如 setPartName(input.getName()); ④public String getToolTipText() 编辑器标题栏的小黄条提示文字,不需像getName那样在EditorPart中进行再设置 ⑤public IPersistableElement getPersistable() 返回一个可以用作保存本编辑器输入数据状态的对象 ⑥public Object getAdapter(Class adapter) 得到一个编辑器的适配器,如下: // 得到一个编辑器的适配器 // IAdaptable a = new ChinaEditorInput();//之所以可以直接将new ChinaEditorPart赋给IAdapteble,是因为IEditorInput扩展自IAdaptable // IFoo x = (IFoo)a.getAdapter(IFoo.class); // if (x != null) [用x来做IFoo的事情....]
以上是从博客:http://aiku.me/bar/10133152 转来的。
相关推荐
通过本文的介绍,我们可以看到`IWorkbenchPage`在Eclipse插件开发中扮演着非常重要的角色。它不仅负责管理编辑器和视图等`IWorkbenchPart`实例,还提供了一系列方法来帮助开发者实现编辑器的打开、关闭和激活等功能...
除此之外,GEF指南还包括了创建MyEditorInput类的内容,这个类需要实现org.eclipse.ui.IEditorInput接口,以便可以作为编辑器输入使用。这样一来,就可以在GEF开发环境中进行图形编辑了。 创建图形编辑器之后,GEF...
第13章详细介绍了如何创建自定义编辑器。首先,你需要理解基本的Eclipse插件结构,包括Plugin.xml文件的配置,它是插件元数据的中心。然后,你需要了解EditorPart类,它是实现编辑器的基础。通过继承这个类,你可以...
- **实现IEditorInput接口**:创建`MyEditorInput`类实现`org.eclipse.ui.IEditorInput`接口,用于标识特定的编辑器输入。 #### 五、建立模型 - **定义模型类**:根据应用程序的需求定义模型类,这些类通常包含...
开发者可能已经实现了 IEditorInput 和 IEditorPart 接口,以便 RCP 能够正确地管理和显示这个 Editor。 总的来说,RCP 的 Viewer 和 Editor 是构建桌面应用程序的关键组成部分,它们为开发者提供了强大且灵活的...
2. **编辑器输入**:编辑器需要处理的输入通常由`IEditorInput`接口表示。这可以是文件、数据库记录或其他任何数据源。在项目代码中,你可能会看到一个自定义的`EditorInput`类,用于封装编辑器的数据。 3. **视图...
创建GEF编辑器时,通常会在Eclipse中创建一个控制器(EditorPart),设定控制器的输入(IEditorInput),并初始化EditDomain、viewers和palette等核心组件。GEF的这一结构确保了各部分之间的低耦合,提高了系统的可...
IEditorInput input = new DiagramEditorInput(); IWorkbenchPage page = window.getActivePage(); try { page.openEditor(input, DiagramEditor.ID, true); } catch (PartInitException e) { // handle error } ...
public void init(IEditorSite site, IEditorInput input) throws PartInitException { setSite(site); setInputWithNotify(input); String filepath = input.getName(); setPartName(filepath); ...