Bevor Sie mit dieser Übung anfangen, müssen Sie .
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:
- Das Klicken auf die Schaltfläche Neu bewirkt Folgendes:
- Die Auswahl in der Mitarbeitertabelle wird gelöscht und die Tabelle wird inaktiviert.
- Das Löschen der Tabellenauswahl hat das Inaktivieren der Schaltfläche Löschen zur Folge.
- Das Feld Filter wird inaktiviert.
- Aus den Feldern mit den Einzelangaben werden alle Werte gelöscht, mit Ausnahme einer neuen Mitarbeiter-ID.
- Der Text auf der Schaltfläche Aktualisieren ändert sich in Hinzufügen.
- Das Klicken auf die Schaltfläche Hinzufügen bewirkt Folgendes:
- Die Werte in den Feldern mit den Einzelangaben werden dem Verzeichnis als neuer Mitarbeitereintrag 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.
Führen Sie die folgenden, in dieser Übung beschriebenen Schritte aus, um dieses Verhalten hinzuzufügen:
- Ein neues Datenquellendatenobjekt hinzufügen, das createNewFullEmployeeRecord() aufruft.
- Ein Basisdatenobjekt hinzufügen, um das Umschalten von Datenobjekten zu erleichtern.
- Mitarbeiterfelder erneut an das switchingDataObject binden.
- Markierung und Methode zum Aktualisieren und Wechseln der Modi definieren.
- Ein Ereignis actionPerformed zur Schaltfläche 'Neu' hinzufügen.
- Schaltfläche 'Aktualisieren' erneut binden.
- 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.
- Erweitern Sie in der Palette des Java Visual Editors das Fach Datenobjekte und wählen Sie
Datenquellendatenobjekt aus.
- 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:

- Klicken Sie mit der rechten Maustaste auf das Datenquellendatenobjekt und wählen Sie
Feld umbenennen aus. Benennen Sie das Datenobjekt in newEmployeeRecord um.
- Klicken Sie mit der rechten Maustaste auf das Datenobjekt newEmployeeRecord und wählen Sie
Binding-Eigenschaften aus. Das Dialogfenster Daten-Binding wird geöffnet.
- Wählen Sie im Feld Datenquelle die Quelle webServiceDataSource aus.
- Wählen Sie im Feld Service den Service createNewFullEmployeeRecord() aus.
- Klicken Sie auf OK.

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.
- 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.

- Benennen Sie das Datenobjekt in switchingDataObject um.
- 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.

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:
- Wählen Sie das entsprechende Feld aus und klicken Sie auf die Registerkarte Binden.
- Wählen Sie im Dialogfenster Felddaten-Bindings das switchingDataObject aus. Zuvor haben Sie die Felder an den selectedEmployeeRecord gebunden.

- 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.

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.
- Klicken Sie in der Sicht "Entwurf" 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()
}
});
- 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();
}
});
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:
- 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.
- Klicken Sie auf die Registerkarte Binden auf der Schaltfläche Aktualisieren.
- Wählen Sie im Feld Argument die Option switchingDataObject aus.

- 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:

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.
- 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.
- 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.
- Erweitern Sie im Dialogfenster Ereignis hinzufügen den Knoten actionBinder und
wählen Sie afterActionPerformed aus.
- 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) {}
});
- Ersetzen Sie den generierten Stub durch den folgenden Code:
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) {}
});
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: