多頁精靈

如果精靈實作複雜作業,您可能需要使用一個以上的頁面以便從使用者取得資訊。

一般來說,實作型樣與單一頁面精靈一樣。

設計精靈時,建議您將必要的資訊存放在第一頁(如果可能的話)。這樣的話,使用者就不必遍訪整個頁面集才能完成作業。選用性資訊可以出 現在後續頁面。

當頁面要求使用者輸入之後頁面才能被視為完成時,請使用 setPageComplete(false) 表示頁面沒有完成。當頁面從它的控制項接收事件時,它會重新檢查以瞭解是否已完成頁面。提供必要的輸入之後,setPageComplete(true) 會通知完成。

Wizard 類別依據頁面的完成狀態,處理要啟用和停用完成按鈕所需 要的邏輯。唯有當它的每一個頁面都設定完成狀態成為 true 時才會為精靈 啟用完成按鈕。

驗證和頁面控制

類別 WizardNewFileCreationPageCreateReadme1 顯示實作頁面驗證的共用型樣。

WizardNewFileCreationPage 為驗證頁面的所有 SWT 事件定義一個共用 事件處理常式。這表示每次從小組件(頁面新增接聽器到那裡)收到事件時就會驗證頁面。

public void handleEvent(Event event) {      setPageComplete(validatePage());
   }

ReadmeCreationPage 頁面建立它的控制項之後,它會使用 validatePage 設定頁面的狀態。

public void createControl(Composite parent) {      super.createControl(parent);
      // 建立控制項、新增接聽器和佈置頁面
      ...
      // 範例區段產生之勾選框
      sectionCheckbox = new Button(group,SWT.CHECK);
      sectionCheckbox.setText(MessageUtil.getString("Generate_sample_section_titles"));
      sectionCheckbox.setSelection(true);
      sectionCheckbox.addListener(SWT.Selection,this);

      subsectionCheckbox = new Button(group,SWT.CHECK);
      subsectionCheckbox.setText(MessageUtil.getString("Generate_sample_subsection_titles"));
      subsectionCheckbox.setSelection(true);
      subsectionCheckbox.addListener(SWT.Selection,this);
      ...
      setPageComplete(validatePage());
   }

使用這個型樣,精靈頁面可以將它的頁面驗證碼放到一種方法,即 validatePage()。這個方法判斷頁面的起始狀態而且只要有從它的頁面上的小組件收到事件時就會重新計算狀態。

因為新增接聽器到區段勾選框,所以每次勾選框收到選項事件時就會重新計算頁面的有效狀態。請注意:除了這個頁面的特定事件處理以外,頁面的 handleEvent 方法必須呼叫 super 以確保有發生繼承的頁面驗證行為。

   public void handleEvent(Event e) {
      Widget source = e.widget;
      if (source == sectionCheckbox) {
         if (!sectionCheckbox.getSelection())
            subsectionCheckbox.setSelection(false);
         subsectionCheckbox.setEnabled(sectionCheckbox.getSelection());
      }
      super.handleEvent(e);
   }