RCP(Rich Client Product)是基于Eclipse平台的一种桌面端开发技术,Elipse开发工具本身就是在RCP的基础上再加上各种插件所构成的。本文主要分为以下几个部分。
RCP与SWT JFace
RCP的开发步骤
RCP实现卡尔曼滤波算法
RCP是一个基于Eclipse平台技术的应用程序所需要的最小集合,开发者可以任意添加其他插件并将它们添加到其中。整个Eclipse平台的图形界面全都是基于SWT技术。JFace是SWT的一个工具包,为SWT提供了很多方便的功能。SWT的基本体系结构共分为三层:
SWT的API
JNI(Java Native Interface)相关代码
使用C语言编写的操作系统本地动态链接库
SWT的API结构又包含这几个主要的类,在进行界面开发时经常会用到。
Layout,负责控件的摆放位置
Widgets,组件类,负责显示窗口和按钮文本框等组件
Events,事件类,负责将控件的消息发送到操作系统,然后将操作系统的消息传回给控件
Graphics, 负责调用JIN函数完成绘图命令
JFace JFace是基于SWT的一套图形工具包,将一些经常使用的图形操作封装起来了。主要对以下几种操作进行了封装:
Viewer查看器
Resource Registry资源注册表,管理和释放程序中用到的图形资源
Field Assist字段帮助,在空间附近提供提示和标注
Action&Contribution 控制菜单栏与工具栏等的一套框架
Dialogs,Wizard Page,Preference Page 对话框 向导页和首选项页
Data Binding 将数据模型与图形界面上的控件绑定
使用JFace使得开发更加方便
首先,新建一个plug-in工程,注意要勾选创建一个RCP程序,然后我们选择带有一个视图的模板。
创建完成后会自动进入MF文件,在Overview里可以看到所需要进行的配置,点击就可进入相应的界面,包括添加依赖项,添加插件,添加和编辑扩展点,也可以在设置Runtime。
扩展点就是向界面添加组件,添加的扩展点都是Eclipse已经封装好的包,直接添加就可以。
下面来介绍自动生成的几个类
Application是程序的入口类,在这个类中定义了两个函数,start()和stop(),在start()函数中创建了一个Display对象,并且创建并运行了工作平台workbench;在stop()函数中关闭了workbench
Display display = PlatformUI.createDisplay();
int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
Activator类负责整个插件程序的生命周期,
ApplicationWorkbenchAdvisor类负责工作台的初始化和窗口的初始化等工作,
ApplicationWorkbenchWindowAdvisor类负责窗口的显示和工作栏的初始化操作,
ApplicationActionBarAdvisor类负责向菜单栏添加菜单项并设置对应的操作,
Perspective类是每个RCP默认的透视图类,通过creatIntialLayout函数可以对透视图里的组件进行布局。
public void createInitialLayout(IPageLayout layout) {
String editorArea = layout.getEditorArea();
IFolderLayout left = layout.createFolder("left", IPageLayout.LEFT, 0.7f, editorArea);
left.addView(GraphView.ID);
IFolderLayout right = layout.createFolder("right", IPageLayout.RIGHT, 0.3f, editorArea);
right.addView(EditorView.ID);
layout.setEditorAreaVisible(false);
}
基于RCP开发了一个由用户编辑输入参数然后给出滤波结果视图的小插件。
绘制图表是引用了java的JFreeChart开源jar包,创建了两个视图,一个用于编辑EditorView,一个用于展示结果GraphView。
chart类 用于绘图
KalmanFilter类是算法实现
matrix和vector类是矩阵类和向量类及其运算
Test类是为了得到卡尔曼滤波计算结果
为了实现编辑器视图和图表视图的交互,我使用了OSGI中的服务机制,对按钮添加Selected事件监听,获取服务,发送包含计算结果的Event实例,再在GraphView中对事件进行处理eventHandler,注册该服务。
最后,推荐一本书,电子工业出版社出版的 《Eclipse插件开发》讲解地比较详细,可以作为入门书籍。