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.
Al diseñar un asistente, conviene que coloque toda la información necesaria en la primera página, si es posible. 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 con el 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 (true).
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 ReadmeCreationPage haya creado sus controles, establece el estado de la página utilizando el método 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 la generación de secciones de ejemplo 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()); }
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 escuchador al 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 asegurar que se produce el comportamiento de validación de página heredado, además de 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); }