经过两天的查阅与实验,在此总结RCP产品中的编辑器状态的保存。
要保存RCP当前透视图的状态。首先需要在ApplicationWorkbenchAdavisor类中的
initialize(IWorkbenchConfigurer configurer)
{
super.initialize(configurer);
// 应用程序退出时保存各窗口的状态
configurer.setSaveAndRestore(true);
……
}
这样,之后,各view的状态已经保存了,同时还有个actionbar等等。
下面要说的是编辑器的保存与恢复。编辑器的保存和view一样,都是通过IMemento对象完成的。view在保存时,eclipse会记住view的id,我们需要在view的saveState()方法中保存我们自定义的view内各个控件的状态就可以了,如果我们不修改saveState()方法,也不会报错,只是各个控件(比如Text内无文本等)无内容。恢复时,init(XX,IMemento)方法,将保存的东西复原。
编辑器的保存与view有所不同,编辑器有这个方法publicvoid init(IEditorSite site, IEditorInput input) 我们需要关注的是IeditorInput,因为在input内包含了编辑器的id和真正的内容,rcp将openEditor时,就是需要传入id和input。因此input就是我们需要在IMemento中保存的对象。
input为了能保存,就要在该类的getPersistable()中返回一个IPersistentElement对象,一般地,我们让input实现IPersistentElement接口,这样直接返回对象本身就可以了,IpersistentElement有两个方法,一个是getFactoryId(),这个是返回创建input对象的工厂的id(下面说),一个是saveState(Imemento)这个就与view中的同名方法一样的作用。
publicvoid saveState(IMemento memento)
{
IMemento editorMem = memento.createChild(TAG_KEY);
editorMem.putString(TAG_EDITOR_ID, this.id);
editorMem.putString(TAG_PATH, this.path.toOSString());
}
下面创建input的工厂。
这个工厂在eclipse启动时就加载,该工厂必须扩展org.eclipse.ui.elementFactories扩展点,它的id就是上面所说的factory的id。其类必须实现IElementFactory接口。该接口中有方法:createElement(IMemento)我们就在这个方法中根据IMemento创建input。注意该方法不能返回null,否则将报错。memento中的东西就是我们在上面的saveState中保存的东西。
public IAdaptable createElement(IMemento memento)
{
IMemento childMem = memento.getChild(EditorInput.TAG_KEY);
String id = childMem.getString(EditorInput.TAG_EDITOR_ID);
String path = childMem.getString(EditorInput.TAG_PATH);
……
Object obj = ……//你的editorInput初始化的对象
EditorInput input = new EditorInput(id,obj);
return input;
}
需要注意的是obj在你的程序中仅此一份,比如一个文件,你new了一份,其他的地方再使用的时候看看是否是同一对象,否则引起麻烦。比如,将obj放在摸一个地方,大家都能访问的到。如果obj对应的数据库内容等不完全,这是需要new一个obj传进去。
看起来已经完成了,如果不能打开上次未关闭的编辑器,可能是在EditorInput中的方法
public boolean exists() {
return true;
}exists返回ture,告知系统这个input是否还存在。
参考:http://www.cnblogs.com/seag/
另一份资料:viewPart的IMemento
Eclipse 的工作台 Workbench 被关闭的时候,会执行每个视图 (ViewPart) 的 saveState 方法,一个 IMemento 对象就会传入到 saveState 方法中,在 IMemento 对象中可以存储整型、字符串型、浮点型等数据,我们就可以将一些状态信息等存储到 IMemento 中,平台会将这些数据存储到 org.eclipse.ui metadata 目录下的 workbench.xml 文件中。下次打开视图时,平台还会从 workbench.xml 重新读取 IMemento 对象,并且传入视图的 init 方法。那么 init 方法就可以恢复上一次关闭前的状态了。打开视图的时候先执行 init,再执行视图的 createPartControl 方法,也就是说 init 的执行在创建组件之前,因此可以保存 init 方法的 IMemento 对象参数的引用,在 createPartControl 方法里使用,获得 IMemento 中存放的信息,这样就可以恢复上一次关闭前一些组件的属性值等。
public void init(IViewSite site, IMemento memento)
{
super.init(site, memento);
String initData = memento.getString("initdata");
}
public void saveState(IMemento memento)
{
// 改变状态的话,就在关闭的时候存储到 IMemento 中
memento.putString("initdata", "IMemento init");
}
在这里我们保存的是editor/view中的东西,如果需要保存整个透视图的布局,必须对插件的WorkbenchAdvisor类的public void initialize(IWorkbenchConfigurer configurer)方法进行重写,添加configurer.setSaveAndRestore(true);这个方法就可以打开保存机制。如果没有这个步骤,上面的工作不会起任何效果。
参见:http://www.blogjava.net/nighty/archive/2007/10/30/156952.html
相关推荐
关闭所有打开的文件或编辑器。 - **Save As**:另存为。将当前文件以不同的名字或位置保存。 - **Print (Ctrl+P)**:打印。打印当前文件。 - **Revert**:还原。将文件恢复到上次打开时的状态。 - **Close Project**...
在Eclipse中,可以直接在POM编辑器中添加、删除或管理依赖,插件会自动下载并引入这些依赖到项目中。 5. **构建与调试**:Eclipse中的Maven插件提供了丰富的构建选项,如“Clean”(清理目标目录)、“Install”...
安装完成后,用户将学习如何启动Eclipse,熟悉其工作界面,包括工作区、透视图、菜单栏、工具栏、编辑器和问题视图等重要组成部分。 在界面介绍部分,教程会详细讲解各个视图的作用。例如,“项目资源管理器”视图...
Eclipse提供了多种编辑器,包括文本编辑器、XML编辑器、Java编辑器等。 **2.6.3 视景(Perspective)** 视景是一组预定义的视图和编辑器布局,用于特定的任务或开发领域。例如,Java视景包含了编写Java代码所需的...
3. `IMemento`: 用于存储和恢复视图或编辑器状态的对象,确保用户在关闭和重新打开时能保持之前的状态。 4. `ServiceFactory`: 提供服务的对象,可以为视图或编辑器提供必要的服务支持。 除了视图和编辑器的创建,`...
- 使用Eclipse内置的备份和恢复功能,定期保存工作空间状态,以便出现问题时快速恢复。 #### 总结 综上所述,Eclipse中XML文件自动提示消失的问题虽然常见但并不难解决。通过细致地检查和调整相关设置,大多数...
- **平台概观**:Eclipse Platform是整个Eclipse IDE的核心部分,它为开发者提供了基本的界面、工作空间管理、编辑器、视图等功能。 - **架构**:主要包括工作台、工作空间、编辑器、视图等组件。 - **项目与资料夹*...
**重新排列视图和编辑器**:Eclipse允许用户自定义工作台布局,可以通过拖拽视图或编辑器来调整它们的位置。 - **放置游标**:在编辑器中定位光标位置。 - **重新排列视图**:将视图移动到工作台的不同位置。 - **...
编辑器图标则代表当前打开的编辑器窗口,而不同颜色和形状的图标则可能表示编辑器的状态,如未保存的更改、错误或警告。 在Eclipse中,项目和工作空间的图标也很重要。项目图标显示在导航视图中,帮助用户区分不同...
- Eclipse的代码编辑器支持语法高亮、自动完成、错误提示等功能,使编码更高效。 - 编辑器还提供了重构工具,如重命名变量、提取方法等,帮助维护代码结构。 5. **构建与运行** - 使用Eclipse的构建工具(Build ...
这个练习有助于理解Eclipse插件开发的基本流程,包括创建编辑器、处理用户交互、保存和恢复状态等。 通过实践这样的项目,开发者不仅可以熟悉Eclipse的API,还能掌握插件开发的最佳实践,从而能够为Eclipse创建更加...
工作台是Eclipse的主界面,包含了各种视图和编辑器,如导航视图、文本编辑器、任务视图和大纲视图等,它们共同构成了开发者的日常交互界面。 5. **UI集成** Eclipse平台提供了强大的机制来集成和定制用户界面,...
- **2.7.3 并列编辑器**:在同一窗口中同时打开多个编辑器。 - **2.7.4 重新排列附加标签的视图**:对带有标签的视图进行布局调整。 - **2.7.5 最大化**:将某个视图或编辑器最大化显示。 **2.8 菜单和工具栏** - ...
当用户在编辑器中输入代码时,Eclipse会自动提供代码建议。 **4.3.2 Code Assist** Code Assist功能提供了更高级的代码建议,如方法参数提示等。 **4.4 执行Java程序** 用户可以通过右键点击Java类,选择“Run ...
在Eclipse中,Perspective是一种工作环境的布局,它定义了特定类型的开发任务所需的视图、编辑器和工具栏的组织方式。下面将详细阐述Perspectives的基本概念、用途以及如何管理和使用。 Eclipse Perspectives: 1. ...
1. **Eclipse IDE**: Eclipse是一个开放源码的项目,由Eclipse基金会管理,提供了一个可扩展的开发平台,包含代码编辑器、调试器、构建工具以及对各种编程语言的支持。 2. **Linux32**: 这指的是针对32位架构的...
2. **多编辑器支持**:Ganymede版本增强了对多种编辑器的支持,允许同时打开多个编辑器并进行切换,提高了代码编写效率。 3. **改进的布局管理**:Eclipse 3.4改进了工作区的布局管理,用户可以更方便地自定义和...