Om din guide implementerar en komplex åtgärd kanske du vill använda flera sidor för att erhålla information från användaren.
Rent generellt är implementeringsmönstret detsamma som för en ensidig guide.
När du utformar en guide är det bra praxis om möjligt att ha all erforderlig information på första sidan. På så sätt behöver inte användaren gå igenom alla sidor för att slutföra åtgärden. Ytterligare information kan sättas på efterföljande sidor.
När det krävs inmatning av användaren på en sida innan den anses fullkomlig, använder du setPageComplete(false) för att indikera att den inte är komplett. Allteftersom sidan får händelser från sina kontroller, sker återkontroll om den är komplett. När erforderlig inmatning erhållits, signalerar setPageComplete(true) att sidan är komplett.
Klassen Wizard hanterar den logik som erfordras för aktivering och inaktivering av knappen Slutför enligt sidornas komplettstatus. Knappen Slutför aktiveras först när alla sidor i en guide har sant som komplettstatus.
Klasserna WizardNewFileCreationPage och CreateReadme1 visar ett gemensamt mönster för implementering av sidvalidering.
WizardNewFileCreationPage definierar en gemensam händelsehanterare för alla SWT-händelser som validerar sidan. Det innebär att sidan valideras när en händelse tas emot från en gränssnittskontroll i vilken sidan lagt till en lyssnare.
public void handleEvent(Event event) { setPageComplete(validatePage()); }
När ReadmeCreationPage skapar sina kontroller, definieras sidans status med hjälp av validatePage.
public void createControl(Composite parent) { super.createControl(parent); // skapar kontroller, lägger till lyssnare och sidlayout ... // kryssrutor för generering av provsektion 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()); }
Om detta mönster används kan hela valideringskoden för en sida i guiden sättas i en metod, validatePage(). Denna metod bestämmer sidans startstatus och omberäknar status så fort en händelse från sidans gränssnittskontroll tas emot.
Eftersom vi lagt till en lyssnare i sektionskryssrutan, räknar vi om giltigt status för sidan så fort kryssrutan tar emot en urvalshändelse. Observera att sidans handleEvent-metod måste anropa super för att säkerställa att det ärvda beteendet för sidvalidering sker som ett tillägg till eventuellt specificerad händelsehantering för denna sida.
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); }