JFace 开发向导 使用 JFace 工具箱(2)
- UID
- 1066743
|
JFace 开发向导 使用 JFace 工具箱(2)
使用 JFace 向导既然我们已经介绍了 SWT 和 JFace 的基础知识以及地址簿应用程序的行为,让我们研究一下如何使用 JFace 向导。由于本文的目的在于介绍 JFace 向导,因此并没有提供有关如何创建独立应用程序的更多背景信息。有关如何在 Eclipse 工作台之外使用 SWT/JFace 组件的更多信息和背景知识,请参阅 Adrian Van Emmenis 的由三部分所组成的文章系列(请参阅 以获取链接)。
在地址簿应用程序中, NewContactAction 类处理用户从 File 菜单选择 New Contact这一操作(请参阅 )。
图 3. New Contact 菜单项
清单 2中的代码说明了为用户打开一个向导所需的对象和方法。
清单 2. NewContactAction 类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 1 public class NewContactAction extends Action
2 {
3 ApplicationWindow window;
4
5 publicNewContactAction(ApplicationWindow w)
6 {
7 window = w;
8 this.setText("New Contact");
9 this.setToolTipText("Create new contact");
10 }
11
12 public void run()
13 {
14 ContactWizard wizard = new ContactWizard();
15
16 WizardDialog dialog = new WizardDialog(window.getShell(), wizard);
17 dialog.open();
18 }
19 }
|
让我们逐步研究这段代码:
- 无论用户何时从菜单栏选择 New Contact,都要执行第 12 行中的 run 方法。
- 如第 14 行所示,在向用户显示 GUI 向导之前需要创建 ContactWizard 类的新实例。该类设置向导的各个页面,允许用户向各个域提供输入。我们稍后将更加详细地介绍 ContactWizard 类。
- 第 16 行用两个变量对 WizardDialog 类进行实例化:第一个变量包含了对 shell 的引用,第二个变量包含了对第 14 行中所创建的 ContactWizard 的引用。 WizardDialog 类负责为用户显示实际向导以及组织每个页面的表现形式。
- 如 所示,第 17 行打开了向导对话框。
图 4. 在 Microsoft Windows XP 上运行的 Contact 向导
实现 JFace 向导要在地址簿应用程序中创建 ContactWizard 类,我们需要创建继承向导基本实现的子类并覆盖下列方法:
- public void addPages() - 该方法提供了一个挂钩,以便在向最终用户显示向导之前给向导添加其它页面。要给向导添加新的页面,只要如 清单 3 所示的那样调用 addPage 方法即可。在 ContactWizard 类中定义了两个页面。我们将在下一节中研究如何创建新的页面。
清单 3. ContactWizard 类中的 addPages 方法1
2
3
4
5
6
7
| public void addPages()
{
page1 = new BasicContactPage(selection);
page2 = new AddressContactPage(selection);
addPage(page1);
addPage(page2);
}
|
- public boolean performFinish() - 当用户点击 Finish 按钮时执行这个方法。在 ContactWizard 中,用这个方法收集向导的每个页面上每个域中的数据并把它们填充到一个域对象中。请参阅 清单 4。
清单 4. ContactWizard 类中的 performFinish 方法1
2
3
4
5
6
7
8
9
10
11
12
13
| public boolean performFinish()
{
Contact contact = new Contact();
contact.setFamilyName(page1.getFamilyName());
contact.setGivenName(page1.getGivenName());
contact.setBusinessPhone(page1.getBusinessPhone());
contact.setHomePhone(page1.getHomePhone());
contact.setEmailAddress(page1.getEmail());
AddressBook.addContact(contact);
return true;
}
|
清单 5 显示了具有 addPages 和 performFinish 方法的完整类。
清单 5. ContactWizard 类1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| ...
public class ContactWizard extends Wizard
{
private BasicContactPage page1;
private AddressContactPage page2;
private ISelection selection;
public ContactWizard()
{
super();
setNeedsProgressMonitor(true);
}
public void addPages()
{
page1 = new BasicContactPage(selection);
page2 = new AddressContactPage(selection);
addPage(page1);
addPage(page2);
}
public boolean performFinish()
{
Contact contact = new Contact();
contact.setFamilyName(page1.getFamilyName());
contact.setGivenName(page1.getGivenName());
contact.setBusinessPhone(page1.getBusinessPhone());
contact.setHomePhone(page1.getHomePhone());
contact.setEmailAddress(page1.getEmail());
AddressBook.addContact(contact);
return true;
}
}
|
|
|
|
|
|
|