首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

JFace 开发向导 使用 JFace 工具箱(3)

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);
...

返回列表