s( " 画图板 " )) {
8 GC gc = new GC(((CanvasView)vw).canvas);
9 gc.drawOval( 80 , 50 , 100 , 100 );
10 gc.dispose();
11 }
12 }
13 }
使用Eclipse RCP进行桌面程序开发(五):2D绘图(3)
时间:2011-04-13 海边沫沫
菜单项绘制矩形DrawRectAction.java的关键部分:
1 public void run(IAction action) {
2 // TODO 自动生成方法存根
3 IViewReference[] vfs = window.getActivePage().getViewReferences ();
4 IViewPart vw;
5 for ( int i = 0 ; i < vfs.length; i ++ ) {
6 vw = vfs[i].getView( false );
7 if (vw.getTitle().equals( " 画图板 " )) {
8 GC gc = new GC(((CanvasView)vw).canvas);
9 gc.drawRectangle( 280 , 50 , 100 , 100 );
10 gc.dispose();
11 }
12 }
13
14 }
菜单项绘制渐变矩形DrawGradientAction.java的关键部分:
1 public void run(IAction action) {
2 // TODO 自动生成方法存根
3 IViewReference[] vfs = window.getActivePage().getViewReferences ();
4 IViewPart vw;
5 for ( int i = 0 ; i < vfs.length; i ++ ) {
6 vw = vfs[i].getView( false );
7 if (vw.getTitle().equals( " 画图板 " )) {
8 GC gc = new GC(((CanvasView)vw).canvas);
9 gc.setBackground(window.getShell().getDisplay ().getSystemColor(SWT.COLOR_BLUE));
10 gc.fillGradientRectangle( 80 , 200 , 100 , 100 , false );
11
12 gc.dispose();
13 }
14 }
15
16 }
菜单项绘制图像DrawImageAction.java的关键部分:
1 public void run(IAction action) {
2 // TODO 自动生成方法存根
3 IViewReference[] vfs = window.getActivePage().getViewReferences ();
4 IViewPart vw;
5 for ( int i = 0 ; i < vfs.length; i ++ ) {
6 vw = vfs[i].getView( false );
7 if (vw.getTitle().equals( " 画图板 " )) {
8 GC gc = new GC(((CanvasView)vw).canvas);
9 Image img = new Image(window.getShell().getDisplay (), " E:\\img.gif " );
10 gc.drawImage(img, 280 , 200 );
11 gc.dispose();
12 }
13 }
14
15 }
使用Eclipse RCP进行桌面程序开发(五):2D绘图(4)
时间:2011-04-13 海边沫沫
上面的方法虽然实现了绘图,但是还有一个问题,就是一旦我们的窗口最小化或者被别的 窗口遮挡后,图形就会消失。原因其实很简单,一旦我们的窗口最小化或者被别的窗口遮挡 后,控件就需要重画,所以我们画的图形就不见了,如果要让控件重画的时候也能绘制图形 ,就应该使用canvas.addPaintListener()为控件添加Paint事件的******。示例代码见下。
1 package cn.blogjava.youxia.views;
2
3 import org.eclipse.swt.widgets.Composite;
4 import org.eclipse.ui.part.ViewPart;
5 import org.eclipse.swt.wi
|