Si el asistente implementa una tarea compleja, tal vez desee utilizar más de una página para obtener información del usuario.
En general, el patrón de implementación es el mismo que el de un asistente de una sola página.
Cree una subclase WizardPage para cada página del asistente. Cada página del asistente debe utilizar setPageComplete(true) cuando tiene suficiente información.
Cree una subclase Wizard que añada cada página al asistente.
Implemente un método performFinish para efectuar la lógica de finalización.
Al diseñar un asistente, si es posible es aconsejable colocar toda la información necesaria en la primera página. De esta manera, el usuario no tiene que pasar por todo el conjunto de páginas para finalizar la tarea. La información opcional puede figurar en las páginas siguientes.
Cuando una página necesita entrada del usuario para que se la considere completa, utilice setPageComplete(false) para indicar que no está completa. A medida que la página recibe eventos de sus controles, vuelve a comprobar si está completa. Una vez se ha proporcionado la entrada necesaria, setPageComplete(true) indica que está completa.
La clase Wizard maneja la lógica necesaria para habilitar e inhabilitar el botón Finalizar de acuerdo al estado de conclusión de las páginas. El botón Finalizar sólo está disponible para un asistente cuando cada una de sus páginas ha establecido su estado de conclusión en verdadero.
Las clases WizardNewFileCreationPage y CreateReadme1 muestran un patrón común para implementar la validación de página.
WizardNewFileCreationPage define un manejador de eventos común para todos los eventos de SWT que valida la página. De esta manera, la página se validará siempre que se reciba un evento de un widget al que la página haya añadido un escuchador.
public void handleEvent(Event event) {
setPageComplete(validatePage());
}
Una vez que la página CreateReadme1 crea sus controles, establece el estado de la página utilizando validatePage.
public void createControl(Composite parent) {
super.createControl(parent);
// crear controles, añadir escuchadores y diseñar la página
...
// recuadros de selección para generar sección de muestra
sectionCheckbox = new Button(group,SWT.CHECK);
sectionCheckbox.setText("Generate sample section titles");
sectionCheckbox.setSelection(true);
// se ha añadido un escuchador a este recuadro de selección
sectionCheckbox.addListener(SWT.Selection,this);
...
setPageComplete(validatePage());
}
Utilizando este patrón, una página de asistente puede colocar todo su código de validación de página en el método validatePage(). Este método determina el estado inicial de la página y vuelve a calcular el estado siempre que recibe un evento de un widget en su página.
Puesto que se ha añadido un recuadro de selección de secciones, se volverá a calcular el estado válido de la página siempre que el recuadro de selección reciba un evento de selección. Tenga en cuenta que el método handleEvent debe llamar a 'super' para asegurarse de que el funcionamiento de la validación de página heredada tiene lugar en adición a cualquier manejo de evento específico para esta página.
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);
}