文档章节

Eclipse插件开发Wizard篇

素人派
 素人派
发布于 2015/07/22 07:55
字数 524
阅读 15
收藏 0
  • 介绍
使用过Eclipse的人,应该都对向导(wizard)不陌生。创建一个Java工程、导入一个项目等等都会用到向导。向导的作用非常简单,也非常重要——不让你在“阴沟里翻船”。 首先,所有向导做的事情(增加、修改工程配置文件)都可以通过手动做到,但是容易出错。 其次,经常性、重复性的比较麻烦但还有规律的事情,都可以通过向导做到。比如:你们团队对于项目都有一些一致性的配置。 最后呢,把你们团队中的模块开发加上“相对”的话,不是会显得更加专业吗?
  • 步骤
增加依赖org.eclipse.ui.ide 在plugin.xml中添加扩展点 [codesyntax lang="xml"]
<extension
 point="org.eclipse.ui.newWizards">
 <category name="SuRen Project"
 	id="org.suren.littlebird.category"/>
 <wizard class="org.suren.littlebird.wizard.SuRenWizard"
 	category="org.suren.littlebird.category"
 	name="SuRen Project Wizard"
 	id="org.suren.littlebird.wizard"/>
</extension>
[/codesyntax] 继承类Wizard,实现接口INewWizard [codesyntax lang="java"]
package org.suren.littlebird.wizard;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;

/**
 * @author suren
 * @date 2015-4-2
 * 工程向导
 * http://surenpi.com
 */
public class SuRenWizard extends Wizard implements INewWizard
{
	private WizardNewProjectCreationPage creationPage;

	public SuRenWizard()
	{
		super();

		System.out.println("SuRenWizard");
	}

	/**
	 * 增加向导页面
	 */
	@Override
	public void addPages()
	{
		System.out.println("addPage");
		creationPage = new WizardNewProjectCreationPage("Setting");
		creationPage.setDescription("SuRen Project Wizard");
		creationPage.setTitle("Hi");
		addPage(creationPage);
	}

	/**
	 * 完成向导时执行
	 */
	@Override
	public boolean performFinish()
	{
		IProject project = creationPage.getProjectHandle();

		try
		{
			project.create(null);
			project.open(null);

			IProjectDescription projectDesc = project.getDescription();

			String[] natureIds = projectDesc.getNatureIds();
			String[] newNatureIds = new String[natureIds.length + 1];
			newNatureIds[0] = "suren.nature";
			System.arraycopy(natureIds, 0, newNatureIds, 1, natureIds.length);

			projectDesc.setNatureIds(newNatureIds);
			project.setDescription(projectDesc, null);

			return true;
		}
		catch (CoreException e)
		{
			e.printStackTrace();
		}

		return false;
	}

	@Override
	public void init(IWorkbench wordbench, IStructuredSelection selection)
	{
		System.out.println("init");
	}

}
[/codesyntax] 上面的代码,是重新定义了一个Wizard,也可以继承一个现有的(例如:新建Java类文件的类NewClassCreationWizard)。 上面使用的Page类是WizardNewProjectCreationPage,如果需要自定义的话,下面有介绍如何自顶一个Page。
  • 自定义Page
继承org.eclipse.jface.wizard.WizardPage,重写方法public void createControl(Composite parent),在这个方法里一定要记得调用setControl。
  • 参考
看看Eclipse插件的HelloWorld怎么写。 http://blog.itpub.net/13081368/viewspace-374853/ 上面的文章中用到了Nature和Builder,详情请看这里。 如果你想让别人可以扩展你的插件的话,可以自定义扩展点。

本文转载自:http://surenpi.com/2015/04/02/eclipse%e6%8f%92%e4%bb%b6%e5%bc%80%e5%8f%91wizard%e7%af%87/

共有 人打赏支持
上一篇: bash快捷键
下一篇: DS1307-F-S
素人派
粉丝 25
博文 1907
码字总数 10223
作品 6
东城
程序员
私信 提问
Nodeclipse 0.8 发布,Node的Eclipse插件

Nodeclipse 0.8 发布了,改进内容包括: 1.jshtml and hogan.js template engines in Express Wizard 2.Styleshhet engines selection in Express Wizard (however correctly generated com......

金氧
2013/12/02
2.5K
4
MyEclipse6.0 安装axis2插件, 调用加密的SAP webservice

首先鄙视一下自己,还在用myeclipse,竟然还是6.0版本,没办法,用习惯了,而且自己的开发机配置不高,装过一些别的IDE,发现用的都不是很流畅。 项目要用java调用sap的webservice接口,自己决...

苏文
2013/06/06
0
0
Eclipse Tomcat plugin安装方法

这篇博客的内容也很naive,最近水平越来越低了。 我目前在服务器上用的Eclipse是标准版,并没有集成什么Tomcat的插件。几年前自己就用过这个插件,全称叫做"Sysdeo Eclipse Tomcat Launcher...

icheer
2013/05/15
0
0
AIR GEAR

AIR GEAR是一款用来快速开发Adobe AIR的Eclipse插件,主要特性如下: AIR project creation wizard WYSIWYG GUI designer for Flex Incremental builder for mxml files ActionScript editin......

匿名
2008/09/16
2.2K
0
Android应用程序签名(官方文档中文版)(下)

公开发布版的签名. 当应用准备好对外发布, 必须: 获取一个合适的私钥. 在release模式下编译应用程序. 使用你的私钥对应用程序进行签名. 使用zipalign来调整和优化APK包 如果使用Eclipse+ADT...

刘敏smile
2013/10/31
0
2

没有更多内容

加载失败,请刷新页面

加载更多

多命令链命令参数

Commands: --install <link> <name> <path> <priority> [--slave <link> <name> <path>] ... 在系统中加入一组替换项. --remove <name> <path> 从 <名......

Pulsar-V
32分钟前
0
0
【转】go get命令使用socket代理

由于某些不可描述的原因,国内使用go get命令安装某些包的时候会超时导致失败,比如net包、sys包、tools包等。第一种解决办法就是自己从git上下载后添加链接到GOPATH中,比如: 1234...

yiduwangkai
34分钟前
0
0
Windows同步对象Event和Linux的条件变量

最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。 1 Windows同步对象Event 微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一...

shzwork
41分钟前
1
0
从上往下打印出二叉树的每个节点,同层节点从左至右打印。

//第一种做法 public class Solution { public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { ArrayList <Integer> li=new ArrayList<Integer>(); ArrayList <TreeN......

南桥北木
51分钟前
1
0
linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部