`

Eclipse RCP开发入门学习笔记——05.2D绘图

阅读更多

----------------------------------------------------------------------------------------------------

学习: http://www.blogjava.net/youxia/archive/2006/12/01/84855.html

----------------------------------------------------------------------------------------------------

 

1. 新建视图 CanvasView:

package hellorcp.canvas;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.ViewPart;

public class CanvasView extends ViewPart {
	public Canvas canvas;

	@Override
	public void createPartControl(Composite parent) {
		// TODO 自动生成方法存根
		canvas = new Canvas(parent, SWT.NONE);
	}

	@Override
	public void setFocus() {
		// TODO 自动生成方法存根
	}

}

 

2. 绘制椭圆菜单 DrawOvalAction:

package hellorcp.canvas;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.graphics.GC;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;

public class DrawOvalAction implements IWorkbenchWindowActionDelegate {

	IWorkbenchWindow window;

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

	}

	public void init(IWorkbenchWindow arg0) {
		this.window = arg0;
	}

	public void run(IAction arg0) {
		IViewReference[] vfs = window.getActivePage().getViewReferences();
		IViewPart vw;
		for (int i = 0; i < vfs.length; i++) {
			vw = vfs[i].getView(false);
			if (vw.getTitle().equals("画图板")) {
				GC gc = new GC(((CanvasView) vw).canvas);
				gc.drawOval(80, 50, 100, 100);
				gc.dispose();
			}
		}
	}

	public void selectionChanged(IAction arg0, ISelection arg1) {
		// TODO Auto-generated method stub
	}

}

 

3. 修改 Perspective.java 如下:

package hellorcp;

import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;

public class Perspective implements IPerspectiveFactory {

	public void createInitialLayout(IPageLayout layout) {
		// FirstView
		String editorArea = layout.getEditorArea();
//		layout.addView("hellorcp.view.FirstView", IPageLayout.RIGHT, 0.2f,
//				editorArea);

		// SecondView
//		layout.setEditorAreaVisible(false);
//		layout.addView("hellorcp.view.SecondView", IPageLayout.RIGHT, 0.5f,
//				editorArea);
		
		// OleView
//		layout.addView("hellorcp.ole.OleView", IPageLayout.RIGHT, 0.5f,
//				editorArea);
		
		// CanvasView
		layout.addView("hellorcp.canvas.CanvasView", IPageLayout.RIGHT, 0.5f,
				editorArea);
	}

}

 

4. 配置 plugin.xml, 片段如下:

1) action:

           	<action
				class ="hellorcp.canvas.DrawOvalAction" 
             	icon ="icons/alt_window_16.gif" 
             	id ="hellorcp.canvas.DrawOvalAction" 
          	    label ="绘制椭圆" 
				menubarPath ="hellorcp.firstmenu/additions" 
              	style ="push" 
                toolbarPath ="additions" 
               	tooltip ="绘制椭圆" /> 

 

2) view:

         <view
         	class="hellorcp.canvas.CanvasView"
         	id="hellorcp.canvas.CanvasView"
         	name="画图板" />

 

 

5. 保存,运行,效果如下:

 

6. 绘制矩形、渐变矩形、图片:

1) 矩形action:

package hellorcp.canvas;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.graphics.GC;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;

public class DrawRectAction implements IWorkbenchWindowActionDelegate {

	IWorkbenchWindow window;

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

	}

	public void init(IWorkbenchWindow arg0) {
		this.window = arg0;
	}

	public void run(IAction arg0) {
		IViewReference[] vfs = window.getActivePage().getViewReferences();
		IViewPart vw;
		for (int i = 0; i < vfs.length; i++) {
			vw = vfs[i].getView(false);
			if (vw.getTitle().equals("画图板")) {
				GC gc = new GC(((CanvasView) vw).canvas);
				gc.drawRectangle(280, 50, 100, 100);
				gc.dispose();
			}
		}
	}

	public void selectionChanged(IAction arg0, ISelection arg1) {
		// TODO Auto-generated method stub
	}

}

 

2) 渐变矩形action:

package hellorcp.canvas;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;

public class DrawGradientAction implements IWorkbenchWindowActionDelegate {

	IWorkbenchWindow window;

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

	}

	public void init(IWorkbenchWindow arg0) {
		this.window = arg0;
	}

	public void run(IAction arg0) {
		IViewReference[] vfs = window.getActivePage().getViewReferences();
		IViewPart vw;
		for (int i = 0; i < vfs.length; i++) {
			vw = vfs[i].getView(false);
			if (vw.getTitle().equals("画图板")) {
				GC gc = new GC(((CanvasView) vw).canvas);
				gc.setBackground(window.getShell().getDisplay().getSystemColor(
						SWT.COLOR_BLUE));
				gc.fillGradientRectangle(80, 200, 100, 100, false);
				gc.dispose();
			}
		}
	}

	public void selectionChanged(IAction arg0, ISelection arg1) {
		// TODO Auto-generated method stub
	}

}

 

3) 图片action:

package hellorcp.canvas;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IViewReference;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;

public class DrawImageAction implements IWorkbenchWindowActionDelegate {

	IWorkbenchWindow window;

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

	}

	public void init(IWorkbenchWindow arg0) {
		this.window = arg0;
	}

	public void run(IAction arg0) {
		IViewReference[] vfs = window.getActivePage().getViewReferences();
		IViewPart vw;
		for (int i = 0; i < vfs.length; i++) {
			vw = vfs[i].getView(false);
			if (vw.getTitle().equals("画图板")) {
				GC gc = new GC(((CanvasView) vw).canvas);
				Image img = new Image(window.getShell().getDisplay(), "E:\\develop\\RCP\\HelloRCP\\splash.bmp");
				gc.drawImage(img, 280, 200);
				gc.dispose();
			}
		}
	}

	public void selectionChanged(IAction arg0, ISelection arg1) {
		// TODO Auto-generated method stub
	}

}

 

4) action配置:

           	<action
				class ="hellorcp.canvas.DrawRectAction" 
             	icon ="icons/alt_window_16.gif" 
             	id ="hellorcp.canvas.DrawRectAction" 
          	    label ="绘制矩形" 
				menubarPath ="hellorcp.firstmenu/additions" 
              	style ="push" 
                toolbarPath ="additions" 
               	tooltip ="绘制矩形" /> 
           	<action
				class ="hellorcp.canvas.DrawGradientAction" 
             	icon ="icons/alt_window_16.gif" 
             	id ="hellorcp.canvas.DrawGradientAction" 
          	    label ="绘制渐变矩形" 
				menubarPath ="hellorcp.firstmenu/additions" 
              	style ="push" 
                toolbarPath ="additions" 
               	tooltip ="绘制渐变矩形" /> 
           	<action
				class ="hellorcp.canvas.DrawImageAction" 
             	icon ="icons/alt_window_16.gif" 
             	id ="hellorcp.canvas.DrawImageAction" 
          	    label ="绘制图片" 
				menubarPath ="hellorcp.firstmenu/additions" 
              	style ="push" 
                toolbarPath ="additions" 
               	tooltip ="绘制图片" /> 

 

5) 保存,运行,效果如下:

 

 

7. 添加Paint事件的监听器(解决窗口最小化或者被别的窗口遮挡后,图形就会消失的问题),修改后的 CanvasView:

package hellorcp.canvas;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

public class CanvasView extends ViewPart {
	public Canvas canvas;

	@Override
	public void createPartControl(Composite parent) {
		// TODO 自动生成方法存根
		canvas = new Canvas(parent, SWT.NONE);

		// 增加Paint监听器,避免窗口变化后绘图消失
		canvas.addPaintListener(new PaintListener() {
			public void paintControl(PaintEvent e) {
				// 画椭圆
				e.gc.drawOval(80, 50, 100, 100);
				// 画矩形
				e.gc.drawRectangle(280, 50, 100, 100);
				// 画渐变矩形
				e.gc.setBackground(PlatformUI.getWorkbench().getDisplay()
						.getSystemColor(SWT.COLOR_BLUE));
				e.gc.fillGradientRectangle(80, 200, 100, 100, false);
				// 画图形
				Image img = new Image(PlatformUI.getWorkbench().getDisplay(),
						"E:\\develop\\RCP\\HelloRCP\\splash.bmp");
				e.gc.drawImage(img, 280, 200);
			}
		});
	}

	@Override
	public void setFocus() {
		// TODO 自动生成方法存根
	}

}

  

  • 大小: 11 KB
  • 大小: 30.1 KB
分享到:
评论

相关推荐

    eclipse rcp 插件开发学习笔记.pdf 15-24章

    在提供的压缩包中,包含了关于Eclipse RCP插件开发15至24章的学习笔记,这些章节覆盖了多个关键主题,下面将对这些主题进行详细解读。 1. **第15章:对话框和向导(Dialogs and Wizards)** - 在Eclipse RCP中,...

    Eclipse RCP 开发入门

    ### Eclipse RCP 开发入门详解 #### 一、Eclipse RCP 概述 Eclipse Rich Client Platform (RCP) 是一种基于Java的框架和技术集合,用于构建具有丰富用户体验的应用程序。Eclipse RCP 提供了一种灵活的方式来构建...

    eclipse rcp开发入六教程及培训资料

    网络中最全面最合适学习或开发...包含eclipse rcp开发入门教程; eclipse rcp基础教程;eclipse rcp开发自学教程; eclipse rcp开发培训教程及ppt等相关资料;教程中包含一步步操作实例,包含对开发原理的讲解与说明;

    Eclipse的RCP开发的入门教程

    "使用Eclipse RCP进行桌面程序开发(五):2D绘图.doc"涵盖了在RCP应用中进行2D图形绘制的技术,这可能涉及到使用SWT(Standard Widget Toolkit)和JFace库提供的绘图API,创建自定义的图表或者可视化效果。...

    eclipse rcp 插件开发学习笔记.pdf 1-14章

    以下是对Eclipse RCP插件开发学习笔记1-14章的详细知识点解析: 1. **第1章 Eclipse平台简介**: - Eclipse平台是基于OSGi(Open Service Gateway Initiative)标准的,提供了插件模型,使得开发者可以构建、运行...

    eclipse rcp应用系统开发方法与实战源代码.zip

    在"eclipse rcp应用系统开发方法与实战源代码.zip"中,我们可以学习到以下关键知识点: 1. **Eclipse RCP架构**:理解Eclipse RCP的基础架构非常重要,包括插件(Plugins)、工作台(Workbench)、视图(Views)、...

    通过例子学习EclipseRCP开发

    ### 通过例子学习Eclipse RCP开发 #### Eclipse RCP概览 Eclipse RCP(Rich Client Platform,富客户端平台)是一种基于Java的框架和技术集合,用于构建具有丰富用户界面的应用程序。它允许开发者创建高度可定制且...

    eclipse RCP Plug-in开发自学教程.pdf

    如果您已经具备了这些基础知识,那么学习Eclipse RCP插件式开发将变得非常容易。 学习Eclipse RCP插件式开发的难点可能在于: 1. Eclipse RCP的学习曲线较陡,需要一定的Java基础和Eclipse基础知识。 2. RCP插件式...

    Eclipse RCP 开发资料

    Eclipse RCP 开发资料打包下载 目录如下: RCP程序设计.pdf(推荐) Addison.Wesley.Eclipse.Rich.Client.Platform.Designing.Coding.and.Packaging.Java.Applications.Oct.2005.chm Eclipse+RCP入门.pdf example_...

    Eclipse RCP.pdf清晰版

    ### Eclipse RCP 入门详解 #### 一、Eclipse RCP 概述 **Eclipse RCP**(Rich Client Platform)是一种构建丰富客户端应用程序的框架,它利用Eclipse平台的强大功能来创建高度定制化的桌面应用程序。通过RCP,...

    Eclipse RCP开发教程

    **Eclipse RCP 开发教程** Eclipse Rich Client Platform (RCP) 是一个用于构建桌面应用程序的框架,它基于 Eclipse IDE 平台,允许开发者利用 Eclipse 的强大功能和丰富的插件系统来创建自定义的、可扩展的应用...

    Eclipse RCP开发详解

    Eclipse Rich Client Platform (RCP) 是一个强大的框架,用于构建桌面应用...通过深入学习"**Eclipse RCP开发详解**",你可以掌握构建自定义插件的技巧,从而充分利用这个平台的优势,打造出满足特定需求的应用程序。

    ECLIPSE+RCP应用系统开发方法与实战(PDF 高岗著)

    《ECLIPSE+RCP应用系统开发方法与实战》这本书是高岗先生关于使用Eclipse RCP(Rich Client Platform)进行应用系统开发的一本实战指南。Eclipse RCP是Eclipse IDE的一部分,它提供了一个框架,使得开发者可以构建...

    eclipse rcp 开发基础教程

    Eclipse RCP(Rich Client Platform)是基于Java的开发框架,用于构建桌面应用程序。它提供了构建用户界面所需的各种组件和工具,允许开发者创建功能丰富的、交互式的应用程序。Eclipse RCP利用Eclipse IDE的强大...

    Eclipse RCP 插件开发指南

    #### Eclipse RCP Plugin 开发快速入门 Eclipse RCP(Rich Client Platform)插件开发是构建基于Eclipse框架的应用程序的核心技术之一。本指南旨在帮助开发者从零开始掌握Eclipse RCP插件开发的基础知识及实战技巧...

    eclipse RCP入门示例介绍

    ### Eclipse RCP 入门示例介绍 #### 一、Eclipse 概述 Eclipse 是一款由 IBM 开发并贡献给开源社区的集成开发环境(Integrated Development Environment, IDE),自发布以来,迅速成为了最受欢迎的 Java 开发工具...

    EclipseRCP系统开发与实战(书).rar

    这本书《Eclipse RCP系统开发与实战》显然是针对想要学习和掌握Eclipse RCP技术的程序员,通过实战案例帮助读者深入理解Eclipse RCP的开发过程。 1. **Eclipse RCP基础知识** - Eclipse RCP是一种基于Java的开发...

    Eclipse RCP 初级入门教程

    总的来说,"Eclipse RCP 初级入门教程"是一个很好的起点,为初学者提供了RCP开发的基本概念和步骤。通过这个教程,你可以逐步熟悉Eclipse RCP的开发环境,创建你的第一个RCP应用,并了解其强大的模块化和扩展能力。...

    eclipse插件开发 rcp入门开发详细讲解一

    通过本文的学习,我们不仅了解了Eclipse RCP插件开发的基本过程,还掌握了不同的运行模式及其应用场景。无论是对于初学者还是有一定经验的开发者来说,掌握这些知识都将对实际工作大有裨益。希望本文能够帮助大家更...

Global site tag (gtag.js) - Google Analytics