Ha a varázsló egy összetett feladatot valósít meg, akkor elképzelhető, hogy több oldalt kíván használni az információk felhasználótól lekéréséhez.
Általánosságban a megvalósítási minta ugyanaz, mint egyoldalas varázsló esetén.
Varázsló tervezésekor hasznos az összes szükséges információt az első oldalra rakni, amennyiben ez lehetséges. Ebben az esetben a felhasználónak nem kell végigmennie a teljes oldalhalmazon a feladat befejezése érdekében. Az elhagyható információk kerülhetnek a további oldalakra.
Ha az oldal felhasználói bemenetet vár a felhasználótól a befejezés előtt, akkor a setPageComplete(false) segítségével jelezze, hogy ez nincs készen. Amikor az oldal eseményeket kap a vezérlőelemektől, akkor ez újból ellenőrzi, hogy az oldal készen van-e. Ha a szükséges bemenet meg van adva, akkor a setPageComplete(true) jelzi, hogy kész van.
A Varázsló osztály kezeli a Befejezés gomb engedélyezéséhez és letiltásához szükséges logikát az oldal befejezési állapotának megfelelően. A Befejezés gomb csak akkor van engedélyezve a varázslóhoz, ha az összes oldal befejezési állapota igaz.
A WizardNewFileCreationPage és CreateReadme1 osztályok megjelenítenek egy közös mintát az oldalérvényesítés megvalósításához.
WizardNewFileCreationPage megad egy általános eseménykezelést az összes SWT eseményhez, amely érvényesíti az oldalt. Ez azt jelenti, hogy az oldal akkor kerül érvényesítésre, ha egy esemény érkezik egy felületi elemtől, amelyhez az oldal hozzáadott egy figyelőt.
public void handleEvent(Event event) { setPageComplete(validatePage()); }
Ha a ReadmeCreationPage saját vezérlőket hoz létre, akkor a validatePage segítségével beállítja az oldal állapotát.
public void createControl(Composite parent) { super.createControl(parent); // create controls, add listeners, and layout the page ... // sample section generation checkboxes 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()); }
A minta segítségével a varázslóoldal egy validatePage() metódusba belerakhatja az összes oldalellenőrzési kódot. Ez a metódus meghatározza az oldal kezdeti állapotát és újból kiszámítja az állapotot minden időpontban, amikor esemény érkezi az oldalon lévő felületi elemtől.
Mivel hozzáadtunk egy figyelőt a szakasz jelölőnégyzetéhez, újból kiszámítjuk az oldal érvényes állapotát, amikor a jelölőnégyzethez kiválasztásesemény érkezik. Ne feledje el, hogy az oldal handleEvent metódusát felső szinten kell meghívni annak biztosításához, hogy az örökölt oldalérvényesítési viselkedés az adott eseménykezelésen felül történjen az oldalhoz.
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); }