如果精靈實作複雜作業,您可能需要使用一個以上的頁面以便從使用者取得資訊。
一般來說,實作型樣與單一頁面精靈一樣。
設計精靈時,建議您將必要的資訊存放在第一頁(如果可能的話)。 這樣的話,使用者就不必遍訪整個頁面集才能完成作業。選用性資訊可以出 現在後續頁面。
當頁面要求使用者輸入之後頁面才能被視為完成時,請使用 setPageComplete(false) 表示頁面沒有完成。 當頁面從它的控制項接收事件時,它會重新檢查以瞭解是否已完成頁面。 提供必要的輸入之後,setPageComplete(true) 會通知完成。
Wizard 類別依據頁面的完成狀態,處理要啟用和停用完成按鈕所需 要的邏輯。唯有當它的每一個頁面都設定完成狀態成為 true 時才會為精靈 啟用完成按鈕。
類別 WizardNewFileCreationPage 和 CreateReadme1 顯示實作頁面驗證的共用型樣。
WizardNewFileCreationPage 為驗證頁面的所有 SWT 事件定義一個共用 事件處理程式。 這表示每次從 Widget(頁面新增接聽器到那裡)收到事件時就會驗證頁面。
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()。 這個方法判斷頁面的起始狀態而且只要有從它的頁面上的 Widget 收到事件時就會重新 計算此狀態。
因為新增接聽器到區段勾選框,所以每次勾選框收到選項事件時就會重新計算頁面 的有效狀態。 請注意:除了這個頁面的特定事件處理以外,頁面的 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); }