Jeśli dany kreator implementuje złożone czynności, konieczne może być użycie więcej niż jednej strony.
Ogólnie wzorzec implementacji jest taki sam, jak w przypadku kreatora pojedynczej strony.
Dobrą praktyką przy projektowaniu kreatora jest umieszczenie wszystkich niezbędnych informacji, o ile to możliwe, na pierwszej stronie. W ten sposób użytkownik nie musi przechodzić przez cały zestaw stron, aby zakończyć czynność. Na kolejnych stronach mogą się znajdować informacje opcjonalne.
Jeśli strona wymaga wprowadzenia danych wejściowych przez użytkownika zanim zostanie uznana za kompletną, należy użyć w tym celu metody setPageComplete(false). Gdy strona odbiera zdarzenie od swoich elementów sterujących, sprawdza ponownie, czy jest już kompletna. Gdy wymagane dane wejściowe zostaną wprowadzone, metoda setPageComplete(true) zasygnalizuje kompletność strony.
Klasa Wizard obsługuje logikę włączania i wyłączania przycisku Zakończ na podstawie stanu kompletności stron. Przycisk Zakończ jest aktywowany tylko wtedy, gdy wszystkie strony kreatora są kompletne (stan kompletności ma wartość true).
Klasy WizardNewFileCreationPage i CreateReadme1 przedstawiają wspólny wzorzec implementowania mechanizmu sprawdzania poprawności strony.
Klasa WizardNewFileCreationPage definiuje wspólny moduł obsługi zdarzeń dla wszystkich zdarzeń SWT, które sprawdzają poprawność strony. Oznacza to, że poprawność strony zostanie sprawdzona po każdym odebraniu zdarzenia od obiektu widget, do którego strona dodała obiekt nasłuchiwania.
public void handleEvent(Event event) { setPageComplete(validatePage()); }
Po utworzeniu przez klasę ReadmeCreationPage jej elementów sterujących stan strony zostaje ustawiony przy użyciu metody validatePage.
public void createControl(Composite parent) { super.createControl(parent); // tworzy elementy sterujące, dodaje obiekty nasłuchiwania i ustala układ strony ... // pola wyboru związane z generowaniem przykładowej sekcji 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()); }
Używając tego wzorca, strona kreatora może umieścić cały kod sprawdzający poprawność strony w jednej metodzie - validatePage(). Ta metoda określa stan początkowy strony i przelicza stan po odebraniu każdego zdarzenia od obiektu widget tej strony.
Ponieważ do pola wyboru sekcji został dodany obiekt nasłuchiwania, poprawny stan strony będzie ustalany za każdym razem, gdy pole wyboru odbierze zdarzenie związane z wyborem. Należy zauważyć, że aby dziedziczone zachowanie sprawdzania poprawności strony występowało dodatkowo dla każdej obsługi zdarzenia strony, metoda handleEvent tej strony musi użyć odwołania 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); }