Bevor Sie mit dieser Übung anfangen, müssen Sie ausführen.

In dieser Übung werden Sie die Anwendung für das Hinzufügen eines neuen Mitarbeitereintrags programmieren. Da die Anwendung beim Hinzufügen eines neuen Mitarbeiters ein komplizierteres und dynamischeres Verhalten aufweist, ist diese Übung an sich komplexer und verlangt von Ihnen bestimmte manuelle Änderungen des Quellcodes. Außerdem veranschaulicht diese Übung einige erweiterte Funktionen der Datenobjekte und stellt ein Beispiel für die kreative Nutzung der Binder und Datenobjekte zu Ihren Zwecken dar.

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

Führen Sie die folgenden, in dieser Übung beschriebenen Schritte aus, um dieses Verhalten hinzuzufügen:

  1. Ein neues Datenquellendatenobjekt hinzufügen, das createNewFullEmployeeRecord() aufruft.
  2. Ein Basisdatenobjekt hinzufügen, um das Umschalten von Datenobjekten zu erleichtern.
  3. Mitarbeiterfelder erneut an das switchingDataObject binden.
  4. Markierung und Methode zum Aktualisieren und Wechseln der Modi definieren.
  5. Ein Ereignis actionPerformed zur Schaltfläche 'Neu' hinzufügen.
  6. Schaltfläche 'Aktualisieren' erneut binden.
  7. Ereignis zum Binder der Schaltfläche 'Aktualisieren' hinzufügen, um den Modus zurückzusetzen.

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

Der Muster-Web-Service enthält den Service createNewFullEmployeeRecord mit einem neuen, leeren Mitarbeitereintrag, der mit der nächsten verfügbaren Mitarbeiter-ID gefüllt wird. Dieser leere Eintrag kann anschließend mit den Daten eines neuen Mitarbeiters gefüllt und wieder an den Web-Service übergeben werden.

  1. Erweitern Sie in der Palette des Java Visual Editors das Fach Datenobjekte und wählen Sie Datenquellendatenobjekt aus.
  2. Bewegen Sie den Mauszeiger über den freien Bereich der Sicht "Entwurf", den unformatierten Bereich, und klicken Sie mit der linken Maustaste, um das Datenquellendatenobjekt abzulegen. Daraufhin wird ein neues Datenquellendatenobjekt hinzugefügt und im unformatierten Bereich angezeigt:

    Datenquellendatenobjekt in unformatiertem Bereich. 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. Das Dialogfenster Daten-Binding wird geöffnet.
  5. Wählen Sie im Feld Datenquelle die Quelle webServiceDataSource aus.
  6. Wählen Sie im Feld Service den Service createNewFullEmployeeRecord() aus.
  7. Klicken Sie auf OK.

    Datenobjekt newEmployeeRecord mit webServiceDataSource verbunden

    Im unformatierten Bereich können Sie nun sehen, dass das Datenquellendatenobjekt newEmployeeRecord an den Web-Service gebunden ist.

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

Da für die Felder für Einzelangaben und für die Schaltfläche Aktualisieren zwischen Modi (zum Ausführen und Aktualisieren sowie zum Erstellen eines neuen Mitarbeitereintrags) umgeschaltet werden muss, müssen sie zu unterschiedlichen Zeiten an zwei verschiedene Datenobjekte gebunden werden. Um diesen Schritt zu erleichtern, fügen Sie ein Basisdatenobjekt mit der Bezeichnung switchingDataObject hinzu. Sie verwenden das Basisdatenobjekt zum Umschalten der Bindung für die Textfelder zwischen selectedEmployeeRecord und newEmployeeRecord.

Das neue Basisdatenobjekt zeigt einfach auf ein anderes Datenobjekt (selectedEmployeeRecord), das Sie in einer vorhergehenden Übung definiert haben. Das neue Datenobjekt wird benötigt, wenn Sie eine Methode erstellen, die das Basisdatenobjekt anweist, den oben erstellten newEmployeeRecord zu verwenden. Das Basisdatenobjekt dient folglich als Zwischendatenobjekt, das zwischen dem Datenobjekt selectedEmployeeRecord und dem Datenobjekt newEmployeeRecord umschaltet und so den visuellen Komponenten in Ihrer Anwendung das Arbeiten mit zwei verschiedenen Datenobjekten ermöglicht.
  1. Wählen Sie in der Palette des Visual Editors Basisdatenobjekt aus und legen Sie es im unformatierten Bereich ab. Daraufhin wird ein basicDataObject hinzugefügt.

    Basisdatenobjekt in unformatiertem Bereich, nicht konfiguriert

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

    switchingDataObject in unformatiertem Bereich, mit Datenobjekt selectedEmployeeRecord verbunden

    Nun bezieht sich switchingDataObject auf selectedEmployeeRecord und gibt dieselben Werte zurück.

3. Mitarbeiterfelder erneut an das switchingDataObject binden

Es sind zwar bereits alle Mitarbeiterfelder für Einzelangaben an selectedEmployeeRecord gebunden, Sie binden sie nun jedoch an switchingDataObject. Nach dem Binden der Felder können Sie dynamisch zwischen Datenobjekten für die Felder umschalten, je nachdem, ob Sie einen vorhandenen Mitarbeitereintrag ändern oder einen neuen Mitarbeitereintrag hinzufügen.

Führen Sie für jedes Feld im Bereich mit den Einzelangaben zu den Mitarbeitern die folgenden Schritte aus:

  1. Wählen Sie das entsprechende 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', in dem lastNameField an Eigenschaft lastName des switchingDataObject gebunden ist

  3. Stellen Sie sicher, dass das Feld noch immer an die korrekte Datenobjekteigenschaft gebunden ist, und klicken Sie auf OK. Wenn Sie das Feld in der Sicht "Entwurf" auswählen, sehen Sie, dass die Binderlinien nun auf das switchingDataObject zeigen.

    Feld für Einzelangaben an switchingDataObject gebunden

4. Markierung und Methode zum Aktualisieren und Wechseln der Modi definieren

Mit der folgenden Methode updateMode() wird geprüft, ob der Markierungsparameter auf neu gesetzt ist. Anschließend wird das Verhalten der Anwendung entsprechend angepasst. Standardmäßig ist der Boolesche Wert isNewMode auf false gesetzt, und die Methode updateMode() aktiviert die Mitarbeitertabelle und das Feld Filter und setzt den Text der Schaltfläche Aktualisieren auf "Aktualisieren". Wird isNewMode auf true gesetzt, wird die Mitarbeitertabelle inaktiviert, die Auswahl von Elementen in der Tabelle wird aufgehoben, das Feld Filter wird inaktiviert und der Text der Schaltfläche Aktualisieren wird auf "Hinzufügen" gesetzt.

Fügen Sie vor der letzten schließenden geschweiften Klammer den folgenden Codeabschnitt der Klasse DirectoryApp.java 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");
	}
}

5. Ein Ereignis actionPerformed zur Schaltfläche 'Neu' hinzufügen

In diesem Schritt fügen Sie Ereigniscode für das Klicken auf die Schaltfläche Neu hinzu. Das Ereignis weist das switchingDataObject an, das Datenobjekt newEmployeeRecord zu verwenden, setzt den Markierungsparameter auf "new", und führt die im vorherigen Schritt hinzugefügte Methode updateMode() aus.

  1. Klicken Sie in der Sicht "Entwurf" mit der rechten Maustaste auf die Schaltfläche Neu und wählen Sie Ereignisse > actionPerformed aus. Der Visual Editor generiert Code mit einem generischen Ereignisstub, der einfach die folgende Zeile an der Konsole ausgibt:
    System.out.println("actionPerformed()");
  2. Ersetzen Sie diesen generierten Stub (die Zeile System.out.println) durch den folgenden Code:
    getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
    getNewEmployeeRecord().refresh();
    
    isNewMode = true; //sets application to new mode
    updateMode(); //changes UI according to new mode
    getLastNameField().grabFocus();

6. Schaltfläche 'Aktualisieren' erneut binden

In einer früheren Übung haben Sie die Schaltfläche Aktualisieren für die Verwendung der Methode modifyEmployee beim Web-Service programmiert. Diese Aktion ist 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 derzeit auf selectedEmployeeRecord gesetzt. Damit die Schaltfläche sowohl eine Aktualisierung als auch eine Einfügung steuern kann, müssen Sie die Aktion der Schaltfläche für die Verwendung von switchingDataObject als Argument für den Service modifyEmployee rekonfigurieren:
  1. Wählen Sie in der Sicht "Entwurf" die Schaltfläche Aktualisieren aus. Beachten Sie den rosa gepunkteten Pfeil, der angibt, dass 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 die Option switchingDataObject aus.

    Komponentenaktion-Bindings für Schaltfläche 'Aktualisieren', die nun switchingDataObject verwendet

  4. Klicken Sie auf OK.

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

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

7. Ereignis zum Binder der Schaltfläche 'Aktualisieren' hinzufügen, um den Modus zurückzusetzen

Wenn auf die Schaltfläche Aktualisieren geklickt wurde und die Aktion im Web-Service beendet ist, soll die Anwendung wieder ihren Standardmodus und ihr Standardverhalten annehmen. Dazu fügen Sie dem Aktionsbinder der Schaltfläche einen Ereignislistener hinzu, der nach der Aktualisierung oder Einfügung den Modus und die Tabelle aktualisiert.

  1. Wählen Sie in der Sicht "Entwurf" die Schaltfläche Aktualisieren aus. Eine Linie zeigt daraufhin die Verbindung der Schaltfläche zur Datenquelle an. Auf der Linie befindet sich ein Symbol, das die SwingDataServiceAction für die Schaltfläche darstellt. Die SwingDataServiceAction steht für den Aktionsbinder der Schaltfläche.
  2. Klicken Sie mit der rechten Maustaste auf das Aktionsbindersymbol für die Schaltfläche und wählen Sie Ereignisse > Ereignisse hinzufügen aus.

    Wichtig: Sie fügen das Ereignis zum Binder der Schaltfläche, nicht zur Schaltfläche selbst hinzu.

  3. Erweitern Sie im Dialogfenster Ereignis hinzufügen den Knoten actionBinder und wählen Sie afterActionPerformed aus.
  4. Klicken Sie auf Fertig stellen. Der folgende Ereignisstub wird der SwingDataServiceAction für die Schaltfläche hinzugefügt:
    modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() { 
    	public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {    
    		System.out.println("afterActionPerformed()"); // TODO Auto-generated Event stub afterActionPerformed()
    	}
    	public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} 
    });
  5. Ersetzen Sie die Zeile System.out.println("afterActionPerformed()"); durch den folgenden Code:
    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();

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

Nun können Sie mit der nächsten Übung fortfahren:

Nutzungsbedingungen | Feedback
(C) Copyright IBM Corporation 2000, 2005. Alle Rechte vorbehalten.