< Vorherige Lektion | Nächste Lektion >

Lerneinheit 2.6: Aktionen und Bindings für das Hinzufügen eines neuen Mitarbeiters konfigurieren

In dieser Lerneinheit ermöglichen Sie es der Anwendung 'My Company Directory', einen neuen Mitarbeiterdatensatz hinzuzufügen.

Das kompliziertere und dynamischere Verhalten der Anwendung für das Hinzufügen eines neuen Mitarbeiters macht auch diese Übung unweigerlich komplexer. Sie werden einige manuelle Änderungen am Quellencode vornehmen müssen. Darüber hinaus werden in dieser Übung einige erweiterte Funktionalitäten der Datenobjekte demonstriert, und es wird Ihnen ein kreatives Beispiel dafür geliefert, wie Sie die Binder und Datenobjekte an Ihre Anforderungen anpassen können.

In der folgenden Liste ist das erforderliche Verhalten der Anwendung beschrieben:

  • Wenn Sie auf die Schaltfläche Neu klicken, führt dies zu folgendem Verhalten:
    • Die Auswahl in der Mitarbeitertabelle wird aufgehoben, und die Tabelle wird inaktiviert.
    • Das Aufheben der Tabellenauswahl führt zum Inaktivieren der Schaltfläche Löschen.
    • Das Feld Filter wird inaktiviert.
    • Sämtliche Werte in den Detailfeldern, mit Ausnahme einer neuen Mitarbeiter-ID, werden gelöscht.
    • Der Text auf der Schaltfläche Aktualisieren ändert sich in Hinzufügen.
  • Wenn Sie auf die Schaltfläche Hinzufügen klicken, führt dies zu folgendem Verhalten:
    • Die in den Detailfeldern eingegebenen Werte werden dem Verzeichnis als neuer Mitarbeiterdatensatz hinzugefügt.
    • Die Tabelle wird aktiviert, und die Werte werden aktualisiert.
    • Das Feld Filter wird aktiviert.
    • Der Text auf der Schaltfläche Hinzufügen ändert sich wieder in Aktualisieren.

Ein neues Datenquellendatenobjekt hinzufügen, das createNewFullEmployeeRecord() aufruft

Der Beispiel-Web-Service stellt den Service 'createNewFullEmployeeRecord' mit einem neuen, leeren Mitarbeiterdatensatz zur Verfügung, der mit der nächsten verfügbaren Mitarbeiter-ID gefüllt wird. Dieser leere Datensatz kann anschließend mit den Informationen eines neuen Mitarbeiters gefüllt und an den Web-Service zurück übergeben werden.

  1. Erweitern Sie in der Palette des Java Visual Editor das Ablagefach 'Datenobjekte', und wählen Sie Datenquellendatenobjekt aus.
  2. Schieben Sie den Mauszeiger auf den freien Bereich der Entwurfssicht oder des unformatierten Bereichs, und klicken Sie mit der linken Maustaste, um das Datenquellendatenobjekt zu übergeben. Daraufhin wird ein neues Datenquellendatenobjekt hinzugefügt und im unformatierten Bereich angezeigt:

    Unformatiertes Datenquellendatenobjekt. Nicht konfiguriert.

  3. Klicken Sie mit der rechten Maustaste auf das Datenquellendatenobjekt, und wählen Sie Feld umbenennen aus. Benennen Sie das Datenobjekt in newEmployeeRecord um.
  4. Klicken Sie mit der rechten Maustaste auf das Datenobjekt 'newEmployeeRecord', und wählen Sie Binding-Eigenschaften aus. Daraufhin wird das Dialogfenster 'Datenbinding' geöffnet.
  5. Wählen Sie im Feld Datenquelle den Wert 'webServiceDataSource' aus.
  6. Wählen Sie im Feld Service den Wert 'createNewFullEmployeeRecord()' aus.
  7. Klicken Sie auf OK.
Im unformatierten Bereich können Sie sehen, dass das Datenquellendatenobjekt 'newEmployeeRecord' an den Web-Service gebunden ist.

Datenobjekt 'newEmployeeRecord', verbunden mit 'webServiceDataSource'

Ein Basisdatenobjekt hinzufügen, um das Umschalten von Datenobjekten zu erleichtern

Da bei den Detailfeldern und bei der Schaltfläche 'Aktualisieren' ein Umschalten des Modus (sowohl zum Ausführen einer Aktualisierung als auch zum Erstellen eines neuen Mitarbeiters) erforderlich ist, müssen sie zu unterschiedlichen Zeiten an zwei unterschiedliche Datenobjekte gebunden werden. Um diesen Schritt zu erleichtern, fügen Sie ein Basisdatenobjekt namens 'switchingDataObject' hinzu. Sie verwenden dieses Basisdatenobjekt zum Umschalten des Bindings für die Textfelder zwischen 'selectedEmployeeRecord' und 'newEmployeeRecord'.

Das neue Basisdatenobjekt zeigt einfach auf ein anderes Datenobjekt (selectedEmployeeRecord), das Sie in einer früheren Übung definiert haben. Dieses neue Datenobjekt wird nützlich, wenn Sie eine Methode erstellen, die diesem Basisdatenobjekt vorgibt, den bereits zu einem früheren Zeitpunkt erstellten newEmployeeRecord zu verwenden. Mit anderen Worten: Dieses Basisdatenobjekt wird als temporäres Datenobjekt fungieren, das zwischen dem Datenobjekt 'selectedEmployeeRecord' und dem Datenobjekt 'newEmployeeRecord' umschaltet und somit den visuellen Komponenten in der Anwendung ermöglicht, mit zwei verschiedenen Datenobjekten zu arbeiten.
  1. Wählen Sie in der Palette des Visual Editor das Basisdatenobjekt aus und übergeben Sie es an den unformatierten Bereich. Ein basicDataObject wird hinzugefügt.

    Basisdatenobjekt im unformatierten Bereich, nicht konfiguriert

  2. Benennen Sie das Datenobjekt in switchingDataObject um.
  3. Setzen Sie in der Sicht 'Eigenschaften' für 'switchingDataObject' die Eigenschaft sourceObject auf selectedEmployeeRecord. Sie können 'selectedEmployeeRecord' im Dropdown-Menü in der Spalte 'Wert' für die Eigenschaft auswählen.

    Nun verweist 'switchingDataObject' auf 'selectedEmployeeRecord' und gibt dieselben Werte wieder:

    'switchingDataObject' im unformatierten Bereich, mit Datenobjekt 'selectedEmployeeRecord' verbunden

Jedes Mitarbeiterfeld erneut an das switchingDataObject binden

Es sind zwar bereits alle Mitarbeiterdetailfelder an selectedEmployeeRecord gebunden, nun binden Sie sie jedoch an switchingDataObject. Nach dem Binden der Felder können Sie dynamisch zwischen Datenobjekten für die Felder in Abhängigkeit davon umschalten, ob Sie einen vorhandenen Mitarbeiterdatensatz ändern oder einen neuen Mitarbeiterdatensatz hinzufügen.

Führen Sie für jedes Feld im Abschnitt für Mitarbeiterdetails die folgenden Schritte aus:
  1. Wählen Sie das Feld aus, und klicken Sie auf die Registerkarte Binden.
  2. Wählen Sie im Dialogfenster 'Felddaten-Bindings' das switchingDataObject aus. Zuvor haben Sie die Felder an den selectedEmployeeRecord gebunden.

    Dialogfenster 'Felddaten-Bindings', lastNameField an die Eigenschaft lastName von switchingDataObject gebunden

  3. Stellen Sie sicher, dass das Feld noch an die richtige Datenobjekteigenschaft gebunden ist, und klicken Sie auf OK. Wenn Sie das Feld in der Entwurfssicht auswählen, können Sie sehen, dass die Binderlinien nun auf switchingDataObject zeigen.

    Detailfeld an switchingDataObject gebunden

Eine Markierung und eine Methode zum Aktualisieren und Umschalten von Modi definieren

Die folgende Methode 'updateMode()' prüft, ob die Modusmarkierung auf 'new' gesetzt ist, und ändert das Verhalten der Anwendung anschließend entsprechend. Standardmäßig ist die Boolesche Markierung 'isNewMode' auf 'false' gesetzt, und die Methode 'updateMode()' aktiviert die Mitarbeitertabelle und das Filterfeld und setzt den Text der Schaltfläche zum Aktualisieren auf 'Aktualisieren'. Wenn 'isNewMode' auf 'true' gesetzt wird, wird die Mitarbeitertabelle inaktiviert, die Auswahl wird ggf. aufgehoben, das Filterfeld wird inaktiviert und der Text der Schaltfläche zum Aktualisieren wird auf 'Hinzufügen' gesetzt.

Fügen Sie der Klasse 'DirectoryApp.java' den folgenden Code unmittelbar vor der letzten schließenden geschweiften Klammer hinzu:
private boolean isNewMode = false;
private void updateMode() {
   if (isNewMode) {
      getEmployeesTable().clearSelection();
      getEmployeesTable().setEnabled(false);
      getFilterField().setEditable(false);
      getUpdateCreateButton().setText("Add");
   } else {
      getEmployeesTable().setEnabled(true);
      getFilterField().setEditable(true);
      getUpdateCreateButton().setText("Update");
   }
}

Der Schaltfläche 'Neu' ein actionPerformed-Ereignis hinzufügen

In diesem Schritt fügen Sie Ereigniscode für das Klicken auf die Schaltfläche Neu hinzu. Das Ereignis gibt für das switchingDataObject vor, das Datenobjekt 'newEmployeeRecord' zu verwenden, es setzt die Modusmarkierung auf 'new' und führt die Methode 'updateMode()' aus, die Sie im vorherigen Schritt hinzugefügt haben.

  1. Klicken Sie in der Entwurfssicht mit der rechten Maustaste auf die Schaltfläche Neu, und wählen Sie Ereignisse > actionPerformed aus. Der folgende Code wird in der Methode 'getNewButton()' generiert:
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) {    
          System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
       }
    });
  2. Ersetzen Sie diesen generierten Stub durch den folgenden Code:
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       public void actionPerformed(java.awt.event.ActionEvent e) {    
          getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
          getNewEmployeeRecord().refresh();
          isNewMode = true; //sets application to new mode
          updateMode(); //changes UI according to new mode
          getLastNameField().grabFocus();
       }
    });

Die Schaltfläche 'Aktualisieren' erneut binden

In einer früheren Lerneinheit haben Sie die Schaltfläche Aktualisieren für die Verwendung der Methode 'modifyEmployee' für den Web-Service programmiert. Diese Aktion wird als SwingDataServiceAction implementiert. Eine der Eigenschaften der SwingDataServiceAction ist das Quellenobjekt, das als Argument für den Service dient. Das Quellenobjekt für die Änderungsaktion ist momentan auf 'selectedEmployeeRecord' gesetzt. Um die Schaltfläche für das Steuern einer Aktualisierung und einer Hinzufügung zu programmieren, werden Sie die Aktion der Schaltfläche neu konfigurieren, sodass sie 'switchingDataObject' als Argument für den Service 'modifyEmployee' verwendet.

  1. Wählen Sie in der Entwurfssicht die Schaltfläche Aktualisieren aus. Beachten Sie den rosa gepunkteten Pfeil, der anzeigt, dass der selectedEmployeeRecord das Argument für den Serviceaufruf ist.
  2. Klicken Sie auf die Registerkarte Binden auf der Schaltfläche Aktualisieren.
  3. Wählen Sie im Feld Argument den Wert 'switchingDataObject' aus.

    Komponentenaktion-Bindings für die Schaltfläche 'Aktualisieren', nun unter Verwendung von switchingDataObject

  4. Klicken Sie auf OK.

    Beachten Sie, dass die Aktion der Schaltfläche nun für die Verwendung des switchingDataObject als Argument für die Methode 'modifyEmployee' konfiguriert ist:

    Schaltfläche 'Aktualisieren', an Web-Service mit switchingDataObject als Argument gebunden

Dem Binder der Schaltfläche 'Aktualisieren' ein Ereignis hinzufügen, um den Modus zurückzusetzen

Nach dem Klicken auf die Schaltfläche Aktualisieren und dem Beenden der Aktion für den Web-Service soll die Anwendung zurück auf ihren Standardmodus und ihr Standardverhalten gesetzt werden. Hierzu fügen Sie dem Aktionsbinder der Schaltfläche einen Ereignislistener hinzu, der den Modus und die Tabelle aktualisiert, nachdem das Aktualisieren oder Hinzufügen abgeschlossen ist.

Fügen Sie den folgenden Code zur Methode 'getModifyEmployeeAction()' für die Schaltfläche 'Aktualisieren' hinzu:
modifyEmployeeAction.addActionBinderListener(
  new jve.generated.IActionBinder.ActionBinderListener() { 
    public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {    
      if (isNewMode) {
        //Go back to using the selectedEmployeeRecord
        getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord());
        //Revert out of new mode
        isNewMode = false; 
        updateMode();
      }
      // Refresh the table's data object
      getLightEmployeeRecordRows().refresh();
    }
    public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} 
});

Prüfpunkt für die Lerneinheit

Wenn Sie nun die Anwendung 'My Company Directory' ausführen, können Sie auf die Schaltfläche Neu klicken und einen neuen Mitarbeiterdatensatz hinzufügen.

< Vorherige Lektion | Nächste Lektion >