以属性视图为例。
eclipse核心运行时组件提供了eclipse类型扩展机制。我们以属性视图显示属性的工作方式来展示。
显示属性动作涉及两个参与者:property视图和被选中的对象。property视图需要通过接口知道被选中对象的属性,被选中的对象则要提供这个接口。property视图要求的接口是IPropertySource。
一、最直接的方法是让被选中的对象实现IPropertySource接口。但存在以下几个问题:
给类添加大量这样接口,显得臃肿;“某个类实现了某项服务”应该是一个实现的细节,我们不希望暴漏出去;最重要的是我们的对象不应该知道property视图的存在。实现模型与UI的解耦合。
二、我们通过某种机制,这种机制能使得我们给一个类添加服务接口,但有不在该类本身的接口上暴漏出来。而且能给现有的类添加行为(方法),同时还不给类添加状态(字段)。最关键的是如何描述、识别这个扩展。
基于上两点,采用eclipse中的IAdaptable扩展支持。该接口只有一个方法,使用者可以通过此方法动态的查询一个对象是否支持某个特定的接口。
eclipse中使用IAdaptable接口的方式有两种:一种是修改现有类的getAdapter()方法,这种方式显而易见直接有if判断参数返回一个adapter就可;另一种是不修改现有方法,getAdapter()通过工厂来实现(从外部扩展现有类的接口)。
下面就来看看如何实现第二种方式:
在程序启动的XXXPlugin的start()方法中,我们写下
IAdapterManager manager = Platform.getAdapterManager();
propAdapterFactory = new PropAdapterFactory();
manager.registerAdapters(propAdapterFactory, MyObject.class);
……
其中MyObject就是我们要显示其属性的对象类型。propAdapterFactory是产生该对象属性adapter的工厂。我们让这个工厂实现IAdapterFactory接口。在工厂的getAdapterList()注册接口类型(如:return new Class[]{IPropertySource.class …}).在getAdapter()中返回的对象需要实现IPropertySource接口。
现在工厂有了,我们怎么能适配器工厂参与到getAdapter()调用中呢?我们修改对象类型MyObject中的getAdapter()方法,方法体如return Platform.getAdapterManager().getAdapter(this,adapter);
另外:在eclipse开发过程中,曾使用以下语句与属性视图交互过。
// 与属性视图交互
PropertySheet ps = (PropertySheet)getViewSite(). getActiveWorkbenchPage().findView(IPageLayout.ID_PROP_SHEET);
if (null != ps)
{
ps.selectionChanged(MyView.this, new StructuredSelection(myObject)); }
当然这个myObject的类有一个myObjectFactory来产生MyObjectAdapter的对象。为了在属性视图中显示的属性按一定的顺序排列,在MyView中的getAdapter()中还要加上:
if (adapter == IPropertySheetPage.class)
{
returnnew MyObjectPropertySheetPage();
}
在类的creatControl()方法体中加setSorter(new PropertySheetSorter());
如果不加,属性将按照a-z的方式排列。
相关推荐
在Eclipse的世界里,理解"IJavaProject"、"IJavaElement"和"IAdaptable"这三个核心接口至关重要,因为它们是构建Eclipse插件和进行代码操作的基础。本文将深入探讨这三个接口的作用域及其在实际开发中的应用。 首先...
当我们调用`macintosh.getAdapter(IOrange.class)`时,系统会尝试找到一个将`IApple`转换为`IOrange`的适配器。如果没有找到这样的适配器,`getAdapter`方法将返回`null`。 #### 五、应用场景 Eclipse Adapters的...
当用户选择了某个文件或文件夹时,属性页会自动更新以显示该对象的相关属性。这种响应机制是由当前激活的Part中的`ISelectionProvider`接口实现的。每个Part都有一个类似于`PartSite`的组件,可以通过将实现`...
首先,我们要理解适配器模式的核心思想。适配器模式通过创建一个适配器类,将旧的或不兼容的接口转换成我们期望的新接口,从而使原本无法协同工作的组件得以协同工作。在Eclipse RCP中,适配器模式常用于连接不同...
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------