- 浏览: 149488 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
EclipseEye:
fair_jm 写道不错 蛮详细的 谢谢分享
SWT/JFace专题 --- SWT中Display和多线程 -
fair_jm:
不错 蛮详细的 谢谢分享
SWT/JFace专题 --- SWT中Display和多线程
1.视图(Views)
视图(实现了org.eclipse.ui.IViewPart接口)包含在视图站点(org.eclipse.ui.IViewSite)中,并通过视图站点包含在工作台页面(IWorkbenchPage)中。视图通过getViewSite()来获得视图站点,而视图站点通过实现继承自工作台站点(IWorkbenchSite)的方法getPage()来获得工作台页面。
在工作台页面中保存了视图的参考信息(org.eclipse.ui.IViewReference)的实例,通过IViewReference所提供的方法getView()来间接获得视图。这样避免了工作台页面直接保存视图本身,从而使引用视图和加载定义视图的插件分离,可以避免或延迟插件的加载。
除了IViewPart以外,IEditorPart也继承自IWorkbenchPart,这就说明了视图和编辑器共享一个共同的行为集合,使得二者有很多相似之处。
Eclipse中包含了很多预定义的视图,这些视图为开发者提供了多个角度去观察资源或编辑器的状态,为应用程序的开发带来了很大的方便。
如,
1)ResourceNavigator类实现了导航器(Navigator),提供了Eclipse工作空间资源的功能
2)抽象类PageBookView是AbstractDebugView/ContentOutline/PropertyView的父类,它支持视图显示某个工作台 组件(IWorkbenchPart)的状态信息。
3)ContentOutline大纲视图,用来显示编辑器内容的大纲,它是由Workbench创建并管理的,无法被再次实例化也无法被继承。
4)属性视图(org.eclipse.ui.views.PropertySheet)/任务视图(org.eclipsee.ui.views.TaskList)/书签视图(org.eclipse.ui.views.BookmarkNavigator)
5)项目资源管理器
使用CommonNavigation类来管理项目的资源(Eclipse3.2新增的org.eclipse.ui.navigatorContnt扩展点,为配置CommonNavigator的扩展提供了强大的支持)
----------------------------
Eclipse提供的org.eclipse.core.runtime.IAdaptable接口,它允许一个对象把他不理解的类型丢下转换成另一种可以访问和控制的类型对象。这是对Adapter模式的经典使用。
Adapter模式是一种结构型的模式,又名包装器 Wrapper,很多时候,为了复用设计的工具类不能被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配,这个时候只需要实现IAdapter接口并重写getAdapter(Class adapter)方法就ok了,这样当调用getAdapter()的时候传入一个特定接口的Class对象,该方法就会返回一个具有该接口的对象。
-------------------------------------------------------
2.编辑器(Editors)
编辑器必须实现org.eclipse.ui.IEditorPart接口,通常编辑器都作为该接口的默认扩展org.eclipse.ui.part.EditorPart的子类,因而它也是org.eclipse.ui.part.WorkbenchPart的间接子类(public abstract class EditorPart extends WorkbenchPart implements IEditorPart )
编辑器必须包含在org.eclipse.ui.IEditorSite中,IEditorSite又包含在工作台页面(IWorkbench
Page)中。同视图一样,工作台页面中保存了编辑器的查考信息(org.eclipse.ui.IEditorReference)的实例,通过IEditorReference提供的方法getEditor()来间接的获得编辑器。这样就避免了工作台页面直接保存编辑器本身,从而使引用编辑器和加载定义编辑器的插件分离开,可以避免或延迟加载相关的插件。
下面介绍几个重要的编辑器类:
1)AbstractTextEditor类
基于文本的编辑器,实现了编辑器是许多基础功能(如,剪切,拷贝,粘贴,上下文管理,响应工作空间中资源的更改等)。
AbstractTextEditor将文本模型和显示分离开,当前文本为编辑器提供IDocumentProvider的实例,这样就允许不同编辑器访问同一个文本模型。IDocumentProvider实例还负责保存正在使用的文本。当在AbstractTextEditor中执行doSave()和doRevertToSaved()等保存操作时,AbstractTextEditor将调用IDocumentProvider实例相关的方法。
2)MultiEditor类
MultiEditor类在一个GUI组件中合并了不同的编辑器,当开发者需要使用不同类型的编辑器显示同一个资源模型时,可以使用这个类。
3)MultiPageEditorPart类抽象的MultiPageEditorPart类用来实现多页编辑器。
4)FormEditor类
FormEditor类也是抽象类,它继承了MultiPageEditorPart类,用来实现基于表格的编辑器。子类必须实现addPages()方法来为FormEditor填充编辑器页面。
----
编辑器页面
org.eclipse.ui.forms.editor.FormPage(class FormPage extends EditorPart implements IFormPage)是构建FormEditor的页面的一个基本类型,所有加入FormEditor的页面都必须是FormPage的子类。
FormPage的子类型可以通过重写creatFormContent(ManagedForm)来构建特定页面的内容。
1)Master-Detail(主-从)风格的FormPage。
抽象类 org.eclipse.ui.forms.MasterDetailsBlock是关键。MasterDetailsBlock类采用注册页面的方式来构建主-从块。registerPages()方法用来具体的从属页面注册到所允许的数据模型,从而建立起从属页面和数据模型的一一对应关系。从属页面也是采用注册方式在
createDetailsPart()方法中注册到主页面中。
MasterDetailsBlock创建主-从页面的过程:
创建MasterPart:createMasterPart(managedForm,sashForm)--->创建DetailsPart:
createDetailsPart(managedForm,sashForm)--->注册页面:regesterPages();--->创建工具栏Action:createToolBarActions(managedForm)
Eclipse的Form组件创建SWT元素时同普通SWT元素的创建不同,需要首先得到Form的工具包--FormTookit,然后通过Form工具包创建SWT元素,例:
FormToolKit toolkit=managedForm.getToolkit();
toolkit.createSection(parent,type);
toolkit.createComposite(parent,type);
toolkit.createButton(parent,type);
FormText rText=toolkit.createFormText(parent,true);
rText.setText(...);
... ...
构建Details部分需要实现IDetailsPage接口。
public interface IDetailsPage extends IFormPart, IPartSelectionListener {
void createContents(Composite parent);
}
Details部分作为一个特定的表格部分,它需要拥有管理表格生命周期的方法于是就继承了IFormPart接口;另外需要监听Master部分的选择做出改变,因此需要继承
IPartSelectionListener接口。
-------------------------------------------------------------
视图(实现了org.eclipse.ui.IViewPart接口)包含在视图站点(org.eclipse.ui.IViewSite)中,并通过视图站点包含在工作台页面(IWorkbenchPage)中。视图通过getViewSite()来获得视图站点,而视图站点通过实现继承自工作台站点(IWorkbenchSite)的方法getPage()来获得工作台页面。
在工作台页面中保存了视图的参考信息(org.eclipse.ui.IViewReference)的实例,通过IViewReference所提供的方法getView()来间接获得视图。这样避免了工作台页面直接保存视图本身,从而使引用视图和加载定义视图的插件分离,可以避免或延迟插件的加载。
除了IViewPart以外,IEditorPart也继承自IWorkbenchPart,这就说明了视图和编辑器共享一个共同的行为集合,使得二者有很多相似之处。
Eclipse中包含了很多预定义的视图,这些视图为开发者提供了多个角度去观察资源或编辑器的状态,为应用程序的开发带来了很大的方便。
如,
1)ResourceNavigator类实现了导航器(Navigator),提供了Eclipse工作空间资源的功能
2)抽象类PageBookView是AbstractDebugView/ContentOutline/PropertyView的父类,它支持视图显示某个工作台 组件(IWorkbenchPart)的状态信息。
3)ContentOutline大纲视图,用来显示编辑器内容的大纲,它是由Workbench创建并管理的,无法被再次实例化也无法被继承。
4)属性视图(org.eclipse.ui.views.PropertySheet)/任务视图(org.eclipsee.ui.views.TaskList)/书签视图(org.eclipse.ui.views.BookmarkNavigator)
5)项目资源管理器
使用CommonNavigation类来管理项目的资源(Eclipse3.2新增的org.eclipse.ui.navigatorContnt扩展点,为配置CommonNavigator的扩展提供了强大的支持)
----------------------------
Eclipse提供的org.eclipse.core.runtime.IAdaptable接口,它允许一个对象把他不理解的类型丢下转换成另一种可以访问和控制的类型对象。这是对Adapter模式的经典使用。
Adapter模式是一种结构型的模式,又名包装器 Wrapper,很多时候,为了复用设计的工具类不能被复用的原因仅仅是因为它的接口与专业应用领域所需要的接口不匹配,这个时候只需要实现IAdapter接口并重写getAdapter(Class adapter)方法就ok了,这样当调用getAdapter()的时候传入一个特定接口的Class对象,该方法就会返回一个具有该接口的对象。
-------------------------------------------------------
2.编辑器(Editors)
编辑器必须实现org.eclipse.ui.IEditorPart接口,通常编辑器都作为该接口的默认扩展org.eclipse.ui.part.EditorPart的子类,因而它也是org.eclipse.ui.part.WorkbenchPart的间接子类(public abstract class EditorPart extends WorkbenchPart implements IEditorPart )
编辑器必须包含在org.eclipse.ui.IEditorSite中,IEditorSite又包含在工作台页面(IWorkbench
Page)中。同视图一样,工作台页面中保存了编辑器的查考信息(org.eclipse.ui.IEditorReference)的实例,通过IEditorReference提供的方法getEditor()来间接的获得编辑器。这样就避免了工作台页面直接保存编辑器本身,从而使引用编辑器和加载定义编辑器的插件分离开,可以避免或延迟加载相关的插件。
下面介绍几个重要的编辑器类:
1)AbstractTextEditor类
基于文本的编辑器,实现了编辑器是许多基础功能(如,剪切,拷贝,粘贴,上下文管理,响应工作空间中资源的更改等)。
AbstractTextEditor将文本模型和显示分离开,当前文本为编辑器提供IDocumentProvider的实例,这样就允许不同编辑器访问同一个文本模型。IDocumentProvider实例还负责保存正在使用的文本。当在AbstractTextEditor中执行doSave()和doRevertToSaved()等保存操作时,AbstractTextEditor将调用IDocumentProvider实例相关的方法。
2)MultiEditor类
MultiEditor类在一个GUI组件中合并了不同的编辑器,当开发者需要使用不同类型的编辑器显示同一个资源模型时,可以使用这个类。
3)MultiPageEditorPart类抽象的MultiPageEditorPart类用来实现多页编辑器。
4)FormEditor类
FormEditor类也是抽象类,它继承了MultiPageEditorPart类,用来实现基于表格的编辑器。子类必须实现addPages()方法来为FormEditor填充编辑器页面。
----
编辑器页面
org.eclipse.ui.forms.editor.FormPage(class FormPage extends EditorPart implements IFormPage)是构建FormEditor的页面的一个基本类型,所有加入FormEditor的页面都必须是FormPage的子类。
FormPage的子类型可以通过重写creatFormContent(ManagedForm)来构建特定页面的内容。
1)Master-Detail(主-从)风格的FormPage。
抽象类 org.eclipse.ui.forms.MasterDetailsBlock是关键。MasterDetailsBlock类采用注册页面的方式来构建主-从块。registerPages()方法用来具体的从属页面注册到所允许的数据模型,从而建立起从属页面和数据模型的一一对应关系。从属页面也是采用注册方式在
createDetailsPart()方法中注册到主页面中。
MasterDetailsBlock创建主-从页面的过程:
创建MasterPart:createMasterPart(managedForm,sashForm)--->创建DetailsPart:
createDetailsPart(managedForm,sashForm)--->注册页面:regesterPages();--->创建工具栏Action:createToolBarActions(managedForm)
Eclipse的Form组件创建SWT元素时同普通SWT元素的创建不同,需要首先得到Form的工具包--FormTookit,然后通过Form工具包创建SWT元素,例:
FormToolKit toolkit=managedForm.getToolkit();
toolkit.createSection(parent,type);
toolkit.createComposite(parent,type);
toolkit.createButton(parent,type);
FormText rText=toolkit.createFormText(parent,true);
rText.setText(...);
... ...
构建Details部分需要实现IDetailsPage接口。
public interface IDetailsPage extends IFormPart, IPartSelectionListener {
void createContents(Composite parent);
}
Details部分作为一个特定的表格部分,它需要拥有管理表格生命周期的方法于是就继承了IFormPart接口;另外需要监听Master部分的选择做出改变,因此需要继承
IPartSelectionListener接口。
-------------------------------------------------------------
发表评论
-
再说SWT中的滚动面板ScrolledComposite实现
2013-06-19 15:43 2328记得以前写过一篇关于滚动面板的文章 SWT中 Scrolle ... -
OSGi参考资料
2013-04-18 01:11 683基于 OSGi 的面向服务的组件编程 探索 OSGi 框架的组 ... -
CDT(编辑、调试)参考资料
2013-04-17 02:15 1115CDT编辑器 --------- 构建基于 CDT 的编辑器, ... -
Workspace Resource框架专题(3)处理工作空间资源更改事件
2013-04-17 01:44 13803 处理工作空间资源更改事件 工作空间API允许工具对它 ... -
Workspace Resource框架专题(2)workspace 框架API
2013-04-17 01:27 14902 工作空间API 本 ... -
Workspace Resource框架专题(1)Resource的概念
2013-04-17 01:12 13931 Resource的概念 如 ... -
如何恢复断点及Marker
2013-03-05 00:41 0如何恢复断点及Marker -
深入Workbench框架
2013-03-01 02:10 1729深入Workbench框架(结合UIPersistent) 1 ... -
Eclipse插件开发中的Action
2013-02-24 23:10 2005插入点用来定义菜单出 ... -
SWT/JFace专题 --- 对话框向导(Dialogs Wizards)
2013-02-24 22:42 2242对话框向导(Dialogs Wizar ... -
SWT/JFace专题 --- JFace
2013-02-24 22:37 1645JFace JFace是基于SWT的一套图形工具包,它没有为 ... -
SWT/JFace专题 --- SWT中Display和多线程
2013-02-24 15:25 3242Display 1.Display 的创建 一个SWT程序 ... -
SWT/JFace专题 --- SWT API 结构
2013-02-23 18:31 1081SWT API 结构 1.布局类(l ... -
Eclipse启动过程(源码级剖析)
2013-02-20 03:24 3422双击eclipse安装目录下的eclipse.exe运行后,会 ... -
SWT/JFace专题 --- SWT结构浅析
2013-02-23 17:02 1023SWT技术是一套基于Java的 ... -
Eclipse平台体系结构
2013-02-21 23:56 18951.Eclipse平台体系结构 1 ... -
RCP平台架构
2013-02-23 14:11 1487RCP 富客户端通常是指具有独立用户界面的客户端程序。富客户 ... -
Ant构建脚本相关
2013-02-18 01:26 0Ant构建脚本相关 -
CDT源码架构研究
2013-02-18 01:24 0CDT源码架构研究 -
SWT/JFace专题 --- SWT/JFace概述
2013-02-23 16:59 868SWT(Standerd Widget Toolkit,标准图 ...
相关推荐
7. **透视图(Perspectives)**:透视图是Eclipse中工作空间的布局,它定义了窗口、视图和编辑器的组织方式。开发插件时,可以创建新的透视图以适应特定的工作流程。 8. **视图(Views)**:视图是Eclipse UI中的...
5. **透视图(Perspective)**:透视图定义了Eclipse工作台的布局,它组织了视图和编辑器,使得开发者可以在不同的工作环境中切换。 6. **视图(View)**:视图显示了模型的特定部分,可以是文件浏览器、问题列表...
7. **编辑器(Editors)**:编辑器是Eclipse插件中最复杂的组件,用于处理特定类型的文件。例如,一个文本编辑器可以处理所有纯文本文件,而一个XML编辑器则提供XML语法高亮和验证。 8. **服务(Services)**:...
- **视景(Perspective)**:是Eclipse的一种预定义布局,包含了特定的视图和编辑器,适用于不同的开发任务,如Java开发、Web开发等。 - **菜单和工具栏**:提供了访问Eclipse各种功能的途径,如文件操作、编辑、...
- **工作台(Workbench)**:是 Eclipse 的主界面,它包括了各种视图(View)和编辑器(Editor),以及用于导航、搜索等功能的工具栏和菜单。 - **视图(View)**:视图提供了对项目或文件的不同视角,例如包资源...
本文主要分析Eclipse源代码中与工作台(Workbench)相关的部分,特别是视图(Views)和编辑器(Editors)的创建机制。 在Eclipse中,工作台是整个IDE的核心组件,它负责组织和管理所有的视图和编辑器。工作台通过`...
- **视图(View)**:视图是工作台中的特定窗口,用于显示与项目或编辑器相关的信息,如包资源管理器、大纲视图等。 - **编辑器(Editor)**:编辑器用于打开和编辑项目中的文件。Eclipse支持多种类型的编辑器,...
通过阅读这篇博客,你可以获得更具体的实现细节和示例代码,从而更好地理解Eclipse RCP中的View和Editor的开发。 在压缩包文件"demo"中,很可能包含了这个示例的完整源代码。解压后,你可以看到项目结构,包括插件...
工作台是Eclipse的主要用户界面,它由一系列的视图和编辑器组成,用户可以通过它进行各种操作,如编写代码、调试程序等。 **2.6.1 视图(View)** 视图是显示特定类型信息的窗口,如资源管理器视图、大纲视图等。...
透视图是Eclipse工作台的一种组织方式,它可以将不同的视图和编辑器组合在一起,以适应不同的任务。开发者可以创建自定义透视图,定制视图和编辑器的布局。 4.1.2 **透视图操作集** 透视图操作集允许用户在透视图...
在实践中,开发Eclipse编辑器插件涉及许多细节,如处理文本高亮、语法检查、自动完成等。开发者需要理解SWT和JFace的事件模型,以及Eclipse的模型-视图-控制器(MVC)架构。此外,调试插件通常需要使用Eclipse的插件...
常见的扩展点如org.eclipse.ui.perspectives用于添加透视图,org.eclipse.ui.views用于创建视图,org.eclipse.ui.editors用于开发编辑器,org.eclipse.ui.actionSets则用于定义操作集。 在Eclipse插件开发过程中,...
3. ** 视图(Views)和编辑器(Editors)**:视图是显示特定信息的区域,编辑器是处理用户编辑操作的地方。理解它们的区别以及如何在透视图(Perspective)中组织它们。 4. ** 页面(Pages)和复合视图(Composite ...
开发者可以通过继承`org.eclipse.ui.views.ViewPart`和`org.eclipse.ui.editors.EditorPart`来创建自定义的视图和编辑器。在源代码中,我们可以找到这些类的实现,它们可能是`cn.edu.jfcs.view`和`...