一、安装一个新的Eclipse for RCP and RAP
为了方便测试而且不影响正常的Eclipse工作,
最好安装一个特定的Eclipse环境。
see http://www.eclipse.org/downloads/
选择这个版本的Eclipse
Eclipse for RCP and RAP Developers, 181 MB
eclipse-rcp-indigo-win32.zip
下载后解压到硬盘,然后创建一个批处理start_rcp.bat,
指向自己的jdk路径,内容如下:
set PATH= set PATH=D:\java\jdk1.6.0_20\bin;%PATH% start eclipse.exe
然后双击执行,设定一个不同的workspace目录,例如
C:\Documents and Settings\Administrator\workspace_rcp
进入Eclipse RCP,关闭最开始的欢迎界面。
二、了解SWT的使用
编写RCP很大程度上需要知道SWT的编写方法。
可以参考官网的介绍。
http://www.eclipse.org/swt/
SWT可以独立于Eclipse工作,所以需要在classpath中加入它自己特定的jar库。
而RCP依赖于Eclipse,需要考虑Eclipse提供的框架,
但好处是不需要顾及swt的jar(因为Eclipse已经在使用它)。
SWT官网提供大量代码片段,
http://www.eclipse.org/swt/snippets/
尝试运行这些小程序可以快速了解SWT的控件使用而不需要翻看SWT的文档。
它们普遍使用这个包:
import org.eclipse.swt.widgets.*;
后面会看到,SWT的程序和RCP的程序有很强的可互换性。
三、创建一个自定义视图插件。
我的目标是要创建一个最简单的插件——
创建一个自定义视图,然后在里面显示一张图片。
创建一个RCP工程:
File->New->Project...
Select a wizard->Plugin Development->Plug-in Project
Plugin-in Project
Project name:填org.eclipse.examples.nanami,按Next按钮。
Content
默认设置,
(
补:因为我是创建插件而非独立运行的应用程序,
所以
Would you like to create a rich client application?
应该选择no。
如果选择yes,本文后面提到的导出产品操作应该改为
New->Other->Product Configuration
然后双击生成的配置文件,配置页右上角会有导出的按钮,
可以同时导出应用程序和升级网站。
本文主要是讨论Eclipse插件开发而非RCP应用程序。
)
按Next按钮。
Templates
选择Plug-in with a view,然后按Next按钮。
Main View Settings
默认设置,然后按Finish按钮。
四、测试工程。
由于模板创建的视图太复杂,可以简化一下。
已经创建了两个类:
org.eclipse.examples.nanami.Activator
org.eclipse.examples.nanami.views.SampleView
视图图标是个小图标,用于在视图上显示:
/org.eclipse.examples.nanami/icons/sample.gif
工程设置可以双击清单文件
/org.eclipse.examples.nanami/META-INF/MANIFEST.MF
先测试这个View(到目前未作任何修改)
打开Activator.java文件,然后点击工具栏上Debug按钮。
选择Eclipse Application,点击OK打开新的Eclipse环境。
Window->Show View->Others->Sample Category->Sample View
打开要修改的视图(显示三个列表项)。
直接退出这个Eclipse环境即可。
五、修改视图属性
右键工程->Properties->Resource->Text file encoding->Other:填UTF-8
双击build.properties,切换到build.properties标签,
编辑这个文件,在最后添加:
javacDefaultEncoding.. = UTF-8
这样发布时使用UTF-8编译代码。
接下来修改视图的标题和替换自己的图标。
把新的图标icon.gif复制到icons/下,然后双击plugin.xml文件。
把
<view name="Sample View" icon="icons/sample.gif" category="org.eclipse.examples.nanami" class="org.eclipse.examples.nanami.views.SampleView" id="org.eclipse.examples.nanami.views.SampleView"> </view>
改为
<view name="Nanami视图" icon="icons/icon.gif" category="org.eclipse.examples.nanami" class="org.eclipse.examples.nanami.views.SampleView" id="org.eclipse.examples.nanami.views.SampleView"> </view>
然后把
<category name="Sample Category" id="org.eclipse.examples.nanami"> </category>
改为
<category name="Nanami" id="org.eclipse.examples.nanami"> </category>
这样就可以修改视图的分类,名称和小图标。
重新调试工程,看是否达到目的。
六、修改视图代码。
视图的主要代码都在SampleView.java这个文件中。
SampleView继承ViewPart,入口点在
public void createPartControl(Composite parent)
由于这个入口使用了
org.eclipse.jface.viewers.TableViewer
这个类看样子是jface的控件,用起来较困难。
可以把这个类化简成这样:
package org.eclipse.examples.nanami.views;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.events.MenuAdapter;
import org.eclipse.swt.events.MenuEvent;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.SWT;
import org.eclipse.ui.part.ViewPart;
public class SampleView extends ViewPart {
public static final String ID = "org.eclipse.examples.nanami.views.SampleView";
private Canvas canvas;
public Control getControl() {
return canvas;
}
@Override
public void createPartControl(Composite parent) {
// 创建画布控件
final Image image = new Image(Display.getCurrent(),
SampleView.class.getResourceAsStream("nanami.jpg"));
canvas = new Canvas(parent, SWT.BORDER);
canvas.setBounds(0, 0, 800, 600);
canvas.addPaintListener(new PaintListener() {
public void paintControl(PaintEvent event) {
event.gc.drawImage(image, 0, 0);
}
});
// 创建右键菜单
Menu menu = new Menu(parent.getShell(), SWT.POP_UP);
final MenuItem copyItem = new MenuItem(menu, SWT.PUSH);
copyItem.setText("版本信息");
copyItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
SampleView.this.showMessage("Nanami视图, v0.0.1.\n"
+ "Copyright weimingtom. All rights reserved.");
}
});
menu.addMenuListener(new MenuAdapter() {
public void menuShown(MenuEvent e) {
}
});
getControl().setMenu(menu);
}
/**
* 弹出对话框
*
* @param message
*/
private void showMessage(String message) {
MessageDialog.openInformation(getControl().getShell(), "Nanami视图",
message);
}
@Override
public void setFocus() {
getControl().setFocus();
}
}
然后把nanami.jpg这个图片复制到org.eclipse.examples.nanami.views包下,
方便视图读取这个图片。
(
补:上面用getResourceAsStream读取资源文件不是太好。
最好使用
AbstractUIPlugin.imageDescriptorFromPlugin
它在自动生成的类Activator代码中
/**
* Returns an image descriptor for the image file at the given
* plug-in relative path
*
* @param path the path
* @return the image descriptor
*/
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
封装了,可以直接使用它。
例如用参数"/icons/xxx.gif"读取目录/icons下的图片。
不过注意在发布产品前记得双击META-INF/MANIFEST.MF
切换到build页,添加资源目录
Binary Build
Select the folders and files to include in the binary build.
例如加入icons目录
否则发布后的程序无法找到icons下的文件(因为根本没有被编译到产品中)
)
上面的代码使用
public void createPartControl(Composite parent)
的参数parent作为父容器,
创建一个新的Canvas,然后显示图片。
可以用相同的方法创建其它SWT控件。
调试的效果是这样:
七、安装方法一:直接安装到本地仓库
双击META-INF/MANIFEST.MF,
切换到Overview,
Exporting部分的
1. ...Organize Manifests Wizard
自动修改META-INF/MANIFEST.MF
添加Export-Package
4. ...Export Wizard
选择Install into host. Repository
虽然比较快速,
但RCP只能安装在编译RCP工程的Eclipse上。
八、安装方法二:创建site工程。
另一种方法就是创建插件更新网站,然后让Eclipse本地安装。
File->New->Others
选择Plug-in Development->Feature Project
Project name:填nanami_feature
Feature ID:填org.eclipse.examples.nanami
Feature Name:填Nanami
按Next。
按Finisth。
在弹出的feature.xml设置中切换到Plug-ins标签页
添加刚才写的插件
org.eclipse.examples.nanami
然后Ctrl+S保存这个配置文件。
最好创建一个插件网站。
File->New->Others
选择Plug-in Development->Update Site Porject
Project name:填nanami
按Finish打开site.xml配置
按Add Feature...添加刚才创建的Feature工程的ID:
org.eclipse.examples.nanami
按Ctrl+S保存。
按左上角的Build All...编译。
生成plugins、features目录和几个jar文件。
工程->右键->属性->Properties
复制这个网站的本地路径名,例如我的路径是:
C:\Documents and Settings\Administrator\workspace_rcp\nanami
Help->Install New Software...
按Add按钮->按Local按钮
在“浏览文件夹”对话框的文件夹填入上面的路径:
C:\Documents and Settings\Administrator\workspace_rcp\nanami
Location会填入:
file:/C:/Documents and Settings/Administrator/workspace_rcp/nanami/
按OK返回刚才的对话框:
如无意外,下面出现Uncategorized->Nanami这个插件。
为了加快安装,而且我的插件没有依赖其它插件,所以把下面的
Contact all update sites during install to find required software
前面的勾去掉。
勾选Nanami插件,然后按Next。
选中Nanami,按Next。
选择I accept the terms of the license agreement。按Finish。
弹出警告框,无视之,直接按OK。
然后按Restart Now重启Eclipse。
Window->Show View->Others->Nanami->Nanami视图
打开那个自己定制的视图,效果如下:
如果要卸载这个插件
Help->About Eclipse->Installation Details
选中Nanami然后按下面的Uninstall...卸载它。