RCP学习笔记(一)

一、文件创建

File-->Plug-in Project ,写入文件名(文件名这里是test,图中写错了)-->next,勾选Generate和This plug-in,选择yes-->next,选择Hello RCP这个文件夹,finish。

二、文件介绍

项目结构

  • Activator.java:插件激活类,用于控制插件的生命周期
  • SampleAction.java:操作类,为工作台菜单栏或工具栏相关联的操作提供了生命周期事件
  • MANIFEST.MF:提供关于插件要求的额外信息。
  • plugin.xml:定义插件如何与系统中的所有插件相关联。
  • build.properties:由构建来进行配置。
  • Application.java:控制项目的启动和停止
  • ApplicationActionBarAdvisor.java:为菜单条添加事件
  • ApplicationWorkbenchAdvisor.java:
  • ApplicationWorkbenchWindowAdvisor.java:设置窗口的一些配置
  • Perspective.java:为plugin.xml中的插件添加事件

三、扩展一个操作

创建一个Action有两种方式,一是在plugin.xml中搜索ActionSet创建一个Action,第二种就是编程(ActionBarAdvisor.java)

这里主要介绍第二种方式 

(1)、创建一个自己的Myaction.java类继承Action

public class Myactionextends Action{
	private IWorkbenchWindow window;
	public Myaction(IWorkbenchWindow window){
		this.window=window;
		this.setText("&Navigtor@Ctrl+Alt+N");//添加快捷方式及显示内容
		setToolTipText("open view");//工具提示框
		ImageDescriptor imag=WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_LCL_PIN_VIEW);//添加一张图片
		this.setImageDescriptor(imag);
		
	}
	public void run(){
		MessageDialog.openInformation(window.getShell(), "Message", "Hello");//运行显示
	}
}

(2)、在ApplicationActionBarAdvisor.java中添加自定义菜单项和已有菜单项

public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
    private Myactionaction;//自定义的action事件
    private IWorkbenchAction exit;//自带的action事件
    private IWorkbenchAction about;
    private IWorkbenchAction newWin;
    private IWorkbenchAction save;
    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
        super(configurer);
    }

    protected void makeActions(IWorkbenchWindow window) {
    	action=new Myaction(window);//在窗体下初始化自定义的action

        exit=ActionFactory.QUIT.create(window);
    	register(exit);
    	
    	about=ActionFactory.ABOUT.create(window);
    	register(about);
    	
    	newWin=ActionFactory.OPEN_NEW_WINDOW.create(window);
    	register(newWin);

    	save=ActionFactory.SAVE.create(window);
    	register(save);
    }
    
    //为菜单栏添加功能
    protected void fillMenuBar(IMenuManager menuBar) {
        MenuManager winmenu=new MenuManager("File");
    	winmenu.add(exit);
    	winmenu.add(about);
    	winmenu.add(newWin);
    	winmenu.add(save);
    	menuBar.add(winmenu);

    	MenuManager windowmenu=new MenuManager("Open");
    	windowmenu.add(action);//将action添加到菜单按钮事件
    	menuBar.add(windowmenu);//将该按钮添加到菜单条中
    }
    
}

ApplicationWorkbenchWindowAdvisor.java设置窗口配置

   public void preWindowOpen() {
        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
        configurer.setInitialSize(new Point(400, 300));
        configurer.setShowCoolBar(true);
        configurer.setShowStatusLine(true);
        configurer.setTitle("Hello RCP"); //$NON-NLS-1$
        configurer.setShowMenuBar(true);
        configurer.setShowFastViewBars(true);
        configurer.setShowPerspectiveBar(true);
        configurer.setShowFastViewBars(true);
    }

 

点击整个项目右键,选择run as Eclipse Application运行项目,效果如下:

 四、添加透视图

在plugin.xml中选择Extensions,选择Add,然后在选项中选择org.eclipse.ui.views,右击“new”,选择“view”,填写id(为该组件的唯一标识),class为view多对应的操作。在该类中添加了一个树形目录,并且可以右击。

view.java

public class view1 extends ViewPart{
	private TreeViewer tv;//添加一个树
	private DrillDownAdapter drillDownAdapter;
	public view1() {
		// TODO Auto-generated constructor stub
	}
	
	public void createPartControl(Composite parent){
		tv=new TreeViewer(parent,SWT.MULTI|SWT.H_SCROLL|SWT.V_SCROLL);
		tv.setContentProvider(new TreeViewerContentProvider());//设置内容提供器
		tv.setLabelProvider(new TreeViewLabelProvider());//设置标签提供器
		tv.setInput(EntityFactory.TreeEntityElement());//读入数据
		 
		fillViewToolBarAction();//添加视图工具栏按钮
		fillViewToolBarContextMenu();//下拉菜单
		fillTreeViewContextMenu();//为查看器添加上下文菜单

		
	}
	public void setFocus(){
		
	}
	//自定义方法,添加工具栏按钮
	private void fillViewToolBarAction(){
		IActionBars bars=getViewSite().getActionBars();
		//定义工具栏
		IToolBarManager toolBar=bars.getToolBarManager();
		drillDownAdapter=new DrillDownAdapter(tv);
		drillDownAdapter.addNavigationActions(toolBar);
		toolBar.add(new Separator());//添加分割符
		toolBar.add(new ActionOne());//添加操作
		toolBar.add(new ActionTwo());
	}
	
	//自定义方法,添加工具栏下拉菜单
	private void fillViewToolBarContextMenu(){
		IActionBars bars=getViewSite().getActionBars();
		IMenuManager toolMenu=bars.getMenuManager();
		toolMenu.add(new ActionOne());
		toolMenu.add(new ActionTwo());
		drillDownAdapter.addNavigationActions(toolMenu);
	}
	//为树查看器添加上下文菜单
	private void fillTreeViewContextMenu(){
		MenuManager menuManager=new MenuManager();
		Menu menu=menuManager.createContextMenu(tv.getControl());
		tv.getControl().setMenu(menu);
		menuManager.add(new ActionOne());
		menuManager.add(new ActionTwo());
		menuManager.add(new Separator());
		//为上下文菜单那添加操作
		drillDownAdapter.addNavigationActions(menuManager);
	}
	
	//操作类
	class ActionOne extends Action{
		public ActionOne(){
			setText("ActionOne");
			setToolTipText("ActionOne tooltip");
			ImageDescriptor imageDesc=WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_ETOOL_NEW_PAGE);
			setHoverImageDescriptor(imageDesc);
		}
		
		public void run(){
			MessageDialog.openInformation(null, "hello", "this is view action");
		}
	}
	
	class ActionTwo extends Action{
		public ActionTwo(){
			setText("ActionTwo");
			setToolTipText("ActionTwo tooltip");
			ImageDescriptor imageDesc=WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_OBJ_THEME_CATEGORY);
			setHoverImageDescriptor(imageDesc);
		}
		
		public void run(){
			MessageDialog.openInformation(null, "hello", "this is view action");
		}
	}
}

 

Perspestive.java 中设置view的布局

public class Perspective implements IPerspectiveFactory {

	public void createInitialLayout(IPageLayout layout) {
		String editor=layout.getEditorArea();
		IFolderLayout left=layout.createFolder("left", IPageLayout.LEFT, 0.25f, editor);
		left.addView("view1");
		IFolderLayout buttom=layout.createFolder("buttom", IPageLayout.BOTTOM, 0.25f, editor);
		buttom.addView("view2");
	}
}

 

ITreeElement.java这是一个接口,目录树的方法

public interface ITreeElement {
	//设置树节点名称
	public void setName(String name);
	
	//得到节点名称
	public String getName();
	
	//设置与子节点集合
	public void setChildren(List children);
	
	//得到子节点集合
	public List getChildren();
	
	//是否有子孙
	public boolean hasChildren();
	
	//添加子节点
	public void addChild(ITreeElement treeElement);
	
}

 

EntityElement.java 实现上面的接口

public class EntityElement implements ITreeElement{
	private String name;
	private List list=new ArrayList();
	public EntityElement() {
		// TODO Auto-generated constructor stub
	}
	
	public EntityElement(String name){
		this.name=name;
	}

	public void setName(String name) {
		this.name=name;
	}

	public String getName() {
		// TODO Auto-generated method stub
		return name;
	}

	public void setChildren(List children) {
		this.list=children;
	}

	public List getChildren() {
		return list;
	}

	public boolean hasChildren() {
		if(list.size()>0){
			return true;
		}else{
			return false;
		}
	}

	public void addChild(ITreeElement treeElement) {
		list.add(treeElement);
	}
	
}

 

EntityFactory.java 设置目录的结构和名称,返回的内容传递给view1.java中的setInput方法

public class EntityFactory {
	//设置集合
	public static Object TreeEntityElement() {
		//一级目录
		EntityElement root1=new EntityElement("员工管理");
		EntityElement root2=new EntityElement("产品管理");
		
		//二级目录
		EntityElement level1=new EntityElement("员工档案");
		EntityElement level2=new EntityElement("员工薪资");
		EntityElement level3=new EntityElement("产品分析");
		EntityElement level4=new EntityElement("产品报价");
		
		//三级层次
		EntityElement leaf1=new EntityElement("短信网址");
		EntityElement leaf2=new EntityElement("传统网站");
		EntityElement leaf3=new EntityElement("wap网站");
		
		//将二级添加到root1中
		root1.addChild(level1);
		root1.addChild(level2);
		
		root2.addChild(level3);
		root2.addChild(level4);
		
		
		level4.addChild(leaf1);
		level4.addChild(leaf2);
		level4.addChild(leaf3);
		
		{//设置在统一集合中返回
			ArrayList list=new ArrayList();
			list.add(root1);
			list.add(root2);
			return list;
		}
	}

}

TreeViewerContentProvider.java内容提供器

public class TreeViewerContentProvider implements ITreeContentProvider{
	public TreeViewerContentProvider() {
		// TODO Auto-generated constructor stub
	}
	
	//返回父节点的子节点
	public Object[] getChildren(Object parentElement){
		ITreeElement treeElement= (ITreeElement)parentElement;
		List list=treeElement.getChildren();
		
		if(list==null||list.isEmpty())
			return new Object[0];//返回空数组
		else 
			return list.toArray();
	}
	
	public Object getParent(Object element){
		return null;
	}
	
	//返回给定元素是否有子元素
	public boolean hasChildren(Object element){
		ITreeElement treeElement= (ITreeElement)element;
		List list=treeElement.getChildren();
		if(list==null||list.isEmpty())
			return false;
		else 
			return true;
	}
	
	//当输入为设定的元素时,返回查看器中显示的元素
	public Object[] getElements(Object inputElement) {
		if(inputElement instanceof List){
			List list=(List)inputElement;
			return list.toArray();
		}else{
			return new Object[0];
		}
	}
	
	public void dispose() {
		// TODO Auto-generated method stub
		
	}
	
	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
		// TODO Auto-generated method stub
		
	}
}

TreeViewLabelProvider.java 树的标签提供器

public class TreeViewLabelProvider implements ILabelProvider {

	public TreeViewLabelProvider() {
	}
	
	
	public void addListener(ILabelProviderListener listener) {
		
	}

	public void dispose() {
		// TODO Auto-generated method stub
		
	}

	public boolean isLabelProperty(Object element, String property) {
		// TODO Auto-generated method stub
		return false;
	}

	public void removeListener(ILabelProviderListener listener) {
		// TODO Auto-generated method stub
		
	}

	//设置各级的图片
	public Image getImage(Object element) {
		//系统自带的定义图表
		String image1=ISharedImages.IMG_OBJ_FOLDER;
		String image2=ISharedImages.IMG_OBJ_FILE;
		String image3=ISharedImages.IMG_DEF_VIEW;
		
		//获取每个树的节点名称
		String string=((EntityElement)element).getName();
		
		if(string.equals("员工管理")||string.equals("产品管理"))//一级目录设置节点图标
			return PlatformUI.getWorkbench().getSharedImages().getImage(image1);
		
		if(string.equals("员工档案")||string.equals("员工薪资")||string.equals("产品分析")||string.equals("产品报价"))//二级目录设置节点图标
			return PlatformUI.getWorkbench().getSharedImages().getImage(image2);
		
		if(string.equals("传统网站")||string.equals("短信网址")||string.equals("wap网站"))//三级目录设置节点图标
			return PlatformUI.getWorkbench().getSharedImages().getImage(image3);
		else
			return null;
	}

	//返回节点的文本
	public String getText(Object element) {
		ITreeElement treeElement=(ITreeElement)element;
		return treeElement.getName();
	}


}

 

源代码参考

https://github.com/DingXiye/RCP1

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值