`

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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics