tion的实例注册到工作台中, 这样当我们的工作台销毁的时候,我们的Action也可以被销毁。
使用Eclipse RCP进行桌面程序开发(二):菜单、工具栏和对话框(5)
时间:2011-04-13 海边沫沫
下面请看Action1类的源代码:
1 package cn.blogjava.youxia.actions;
2
3 import org.eclipse.jface.action.Action;
4 import org.eclipse.ui.IWorkbenchWindow;
5 import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;
6 import cn.blogjava.youxia.rcp_start.FirstDialog;
7
8
9 public class Action1 extends Action implements IWorkbenchAction {
10
11 private IWorkbenchWindow workbenchWindow;
12
13 public Action1(IWorkbenchWindow window) {
14 if (window == null ) {
15 throw new IllegalArgumentException();
16 }
17
18 this .workbenchWindow = window;
19 }
20
21 public void run() {
22 // make sure action is not disposed
23 if (workbenchWindow != null ) {
24 // 在这里添加功能
25 FirstDialog dg = new FirstDialog(workbenchWindow.getShell ());
26 dg.open();
27
28 }
29 }
30
31 public void dispose() {
32 workbenchWindow = null ;
33
34 }
35
36 }
在构造函数中保存我们工作台窗口的引用,在run方法中执行功能,是不是很简单?在这 里,我们用到了一个对话框类cn.blogjava.youxia.rcp_start.FirstDialog,这个类从 org.eclipse.swt.widgets.Dialog类继承,熟悉swt的朋友一定不会陌生。我建议大家可以使 用Designer插件,这个插件对swt/jface提供非常好的可视化支持,在这个对话框中,我们只 简单的添加了两个按钮。
FirstDialog.java源文件如下:
1 package cn.blogjava.youxia.rcp_start;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.events.SelectionAdapter;
5 import org.eclipse.swt.events.SelectionEvent;
6 import org.eclipse.swt.widgets.Button;
7 import org.eclipse.swt.widgets.Dialog;
8 import org.eclipse.swt.widgets.Display;
9 import org.eclipse.swt.widgets.Shell;
10
11
12 public class FirstDialog extends Dialog {
13
14 protected Shell shell;
15
16 private int result;
17
18 public FirstDialog(Shell parent, int style) {
19 super (parent, style);
20 }
21
22 public FirstDialog(Shell parent) {
23 this (parent, SWT.NONE);
24 }
25
26 public int open() {
27 createContents();
28 shell.open();
29 shell.layout();
30 Display display = getParent().getDisplay();
31 while ( ! shell.isDisposed()) {
32 if ( ! display.readAndDispatch())
33 display.sleep();
34 }
35 return result;
36 }
37
38 protected void createContents() {
39 shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
40 shell.setSize( 150 , 70 );
41 shell.setText( " 第一个对话框 " );
42
43 final Button okButton = new Button(shell, SWT.NONE);
44 okButton.addSelectionListener(
|