Se la propria procedura guidata implementa un'attività complessa, può essere necessario utilizzare più pagine per ottenere informazioni dall'utente.
In generale, il modello di implementazione corrisponde a quello previsto per una procedura guidata a pagina singola.
Creare una sottoclasse WizardPage per ciascuna pagina della procedura guidata. Ogni pagina dovrebbe utilizzare setPageComplete(true) quando dispone di informazioni sufficienti.
Creare una sottoclasse Wizard che aggiunge ciascuna pagina alla procedura guidata.
Implementare un metodo performFinish per eseguire la logica di fine.
Quando si progetta una procedura guidata, è buona norma inserire tutte le informazioni necessarie sulla prima pagina. In questo modo, l'utente non dovrà attraversare tutte le pagine per completare l'attività. Le informazioni facoltative potranno essere immesse sulle pagine successive.
Quando una pagina richiede un'immissione dall'utente prima di potersi considerare completa, utilizzare setPageComplete(false) per specificare che non è completa. Quando la pagina riceve eventi provenienti dai propri controlli, esegue nuovamente la verifica per controllare se è completa. Quando viene fornita l'immissione richiesta, setPageComplete(true) segnala il completamento.
La classe Wizard gestisce la logica necessaria per abilitare e disabilitare il pulsante Fine in base allo stato di completamento delle pagine. Il pulsante Fine viene abilitato per una procedura guidata solo quando ciascuna delle pagine presenta un valore true per lo stato di completamento.
Le classi WizardNewFileCreationPage e CreateReadme1 mostrano un modello comune per l'implementazione della convalida di pagina.
WizardNewFileCreationPage definisce un gestore di eventi comuni per tutti gli eventi SWT che convalidano la pagina. Ciò significa che la pagina verrà convalidata ogni volta che si riceve un evento da un widget al quale la pagina ha aggiunto un listener.
public void handleEvent(Event event) {
setPageComplete(validatePage());
}
Una volta che la pagina CreateReadme1 crea i propri controlli, imposta lo stato della pagina utilizzando validatePage.
public void createControl(Composite parent) {
super.createControl(parent);
// creare controlli, aggiungere listener ed eseguire il layout della pagina
...
// caselle di controllo per creazione della sezione di esempio
sectionCheckbox = new Button(group,SWT.CHECK);
sectionCheckbox.setText("Generate sample section titles");
sectionCheckbox.setSelection(true);
// aggiungere un listener a questa casella di controllo
sectionCheckbox.addListener(SWT.Selection,this);
...
setPageComplete(validatePage());
}
Utilizzando questo modello, una pagina di procedura guidata può inserire tutto il proprio codice di convalida di pagina in un metodo validatePage(). Questo metodo determina lo stato iniziale della pagina e ricalcola lo stato ogni volta che riceve un evento da un widget sulla pagina.
Poiché è stato aggiunto un listener alla casella di controllo della sezione, lo stato valido della pagina verrà rielaborato ogni volta che tale casella di controllo riceve un evento di selezione. Notare che il metodo handleEvent della pagina deve richiamare super per assicurare che il comportamento di convalida della pagina ereditato si verifichi in aggiunta a qualsiasi gestione di evento specifico per questa pagina.
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);
}