Mehrseitige Assistenten

Wenn Ihr Assistent eine komplexe Task implementieren soll, ist es unter Umständen sinnvoll, die Informationen vom Benutzer auf mehreren Seiten anzufordern.

Im Allgemeinen ist das Implementierungsmuster jedoch mit dem eines einzelseitigen Assistenten identisch.

Beim Entwerfen eines Assistenten hat sich die Praxis bewährt, alle erforderlichen Informationen in die erste Seite zu stellen, wenn dies möglich ist. Auf diese Weise muss der Benutzer nicht alle Seiten durcharbeiten, um die Task fertig zu stellen. Für optionale Angaben können Sie Folgeseiten verwenden.

Wenn der Benutzer auf einer Seite noch Informationen eingeben muss, bevor die Seite als abgeschlossen gelten kann, machen Sie dies durch die Verwendung der Methode setPageComplete(false) kenntlich. Sobald die Seite Ereignisse aus ihren Steuerelementen empfängt, prüft sie erneut, ob die Seite nun fertig gestellt ist. Wird die erforderliche Eingabe zur Verfügung gestellt, signalisiert die Methode setPageComplete(true) die Fertigstellung.

Die Klasse Wizard verarbeitet die Logik, mit der die Schaltfläche Fertig stellen gemäß dem Fertigstellungsstatus der Seite aktiviert bzw. inaktiviert wird. Die Schaltfläche Fertig stellen wird in einem Assistenten erst dann aktiviert, wenn für alle seine Seiten der Fertigstellungsstatus auf "true" (= wahr) gesetzt wurde.

Gültigkeitsprüfung und Seitensteuerung

Die Klassen WizardNewFileCreationPage und CreateReadme1 zeigen ein allgemeines Muster zur Implementierung einer Seitenauswertung.

Die Klasse WizardNewFileCreationPage definiert eine allgemeine Ereignissteuerroutine für alle SWT-Ereignisse, die die Seite auswerten. Dies bedeutet, dass die Seite immer dann ausgewertet wird, wenn von einem Widget, dem die Seite eine Listenerfunktion hinzugefügt hat, ein Ereignis empfangen wird.

   public void handleEvent(Event event) {
      setPageComplete(validatePage());
   }

Sobald die Seite ReadmeCreationPage ihre Steuerelemente erstellt, legt sie den Status der Seite mit der Methode validatePage fest.

   public void createControl(Composite parent) {
      super.createControl(parent);
      // Steuerelemente erstellen, Listener-Funktionen hinzufügen und Seitenlayout definieren
      ...
      // Markierungsfelder für die Generierung von Beispielabschnitten
      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());
   }

Mit diesem Muster kann eine Assistentenseite den gesamten Code zur Seitenauswertung in eine Methode namens validatePage() stellen. Diese Methode bestimmt den Anfangsstatus der Seite und berechnet den Status immer dann erneut, wenn sie ein Ereignis aus einem Widget ihrer Seite empfängt.

Da dem Markierungsfeld "Titel für Beispielabschnitte generieren" eine Listener-Funktion hinzugefügt wurde, wird der gültige Status der Seite immer dann erneut berechnet, wenn dieses Markierungsfeld ein Auswahlereignis empfängt. Bitte beachten Sie, dass die Methode handleEvent der Seite übergeordnet aufgerufen werden muss. Hierdurch wird sichergestellt, dass das Verhalten der übernommenen Seitenauswertung zusätzlich zu allen spezifischen Ereignisverarbeitungen für diese Seite stattfindet.

      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);
   }

Copyright IBM Corporation und Andere 2000, 2003.