JFace 开发向导 使用 JFace 工具箱(3)
- UID
- 1066743
|
JFace 开发向导 使用 JFace 工具箱(3)
实现 JFace WizardPage没有实现 WizardPage 的类, ContactWizard 就不会有任何行为。您可以将向导看成是一堆卡片,每一张卡片都有自己的布局和设计。每个 WizardPage 负责向导中单个页面(即卡片)的布局和行为。要创建 WizardPage ,我们需要创建继承 WizardPage 基本实现的子类并实现 createControl 方法,从而为向导页面创建特定的 GUI 控件。
开发 WizardPage 时,需要完成下列各项:
- 使用指定父项创建一个组合。
- 创建窗口小部件的布局。对于 BasicContactPage 类,使用 GridLayout。
- 在第 2 步创建的布局中构造并布置窗口小部件。有关 SWT 窗口小部件的更详尽的文档,请参阅 中的链接。 清单 6 演示了在 ContactWizard 类中构造和布置 BasicContactPage 所需的代码。请参阅 中该向导页面的抓屏。
清单 6. BasicContactPage 类中的 createControl 方法 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| ...
public void createControl(Composite parent)
{
Compositecontainer = new Composite(parent, SWT.NULL);
GridLayoutlayout = new GridLayout();
container.setLayout(layout);
layout.numColumns = 2;
layout.verticalSpacing = 9;
Label label= new Label(container, SWT.NULL);
label.setText("&Given Name:");
givenNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
GridData gd= new GridData(GridData.FILL_HORIZONTAL);
givenNameText.setLayoutData(gd);
givenNameText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
dialogChanged();
}
});
label = newLabel(container, SWT.NULL);
label.setText("&Family Name:");
familyNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
gd = newGridData(GridData.FILL_HORIZONTAL);
familyNameText.setLayoutData(gd);
familyNameText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
dialogChanged();
}
});
label = newLabel(container, SWT.NULL);
label.setText("&Nickname:");
nickNameText= new Text(container, SWT.BORDER | SWT.SINGLE);
gd = newGridData(GridData.FILL_HORIZONTAL);
nickNameText.setLayoutData(gd);
createLine(container, layout.numColumns);
label = newLabel(container, SWT.NULL);
label.setText("&Business Phone:");
businessPhoneText = new Text(container, SWT.BORDER | SWT.SINGLE);
gd = newGridData(GridData.FILL_HORIZONTAL);
businessPhoneText.setLayoutData(gd);
label = new Label(container, SWT.NULL);
label.setText("&Home Phone:");
homePhoneText = new Text(container, SWT.BORDER | SWT.SINGLE);
gd = newGridData(GridData.FILL_HORIZONTAL);
homePhoneText.setLayoutData(gd);
createLine(container, layout.numColumns);
label = newLabel(container, SWT.NULL);
label.setText("&E-Mail Address:");
emailText =new Text(container, SWT.BORDER | SWT.SINGLE);
gd = newGridData(GridData.FILL_HORIZONTAL);
emailText.setLayoutData(gd);
emailText.addModifyListener(newModifyListener()
{
public void modifyText(ModifyEvent e)
{
dialogChanged();
}
});
//dialogChanged();
setControl(container);
}
...
|
- 为任何可能需要输入验证或转换的窗口小部件创建侦听器。对于 BasicContactPage 类,创建了几个 ModifyListeners 对特定数据域执行输入验证。无论何时修改文本域中的文本,都要执行 dialogChanged 方法。该方法负责处理错误并将错误报告给向导。 清单 7演示了处理输入验证和将任何错误通知向导所需的代码。
清单 7. 处理输入验证类的 dialogChanged 和 updateStatus 方法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
| ...
private void dialogChanged()
{
if (this.getGivenName().length() == 0)
{
updateStatus("Given name must be specified.");
return;
}
if (this.getFamilyName().length() == 0)
{
updateStatus("Family name must be specified.");
return;
}
if (this.getEmail().length() > 0)
{
if (this.getEmail().indexOf("@") < 0)
{
updateStatus("Enter your email address as yourname@yourdomain.com");
return;
}
}
updateStatus(null);
}
private void updateStatus(String message)
{
setErrorMessage(message);
setPageComplete(message == null);
...
|
|
|
|
|
|
|