`

Eclipse RCP插件编程学习简记

阅读更多

 

一、安装一个新的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...卸载它。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics