在這個練習中,您將啟用 應用程式來新增新的員工記錄。 由於應用程式新增新員工的行為動態而複雜,因此,這個練習先天上就比較複雜,程式碼必須進行一些手動變更。 另外,這個練習也示範了資料物件的一些進階功能,且提供了可配合您的需求來使用連結程式和資料物件的創造性的方式範例。
下列清單說明應用程式的必要行為:
如果要新增這個行為,請完成這個練習所概述的下列步驟:
Web 服務範例提供一項 createNewFullEmployeeRecord 服務,這項服務則提供一份將移入下個可用的員工 ID 號碼的新空白員工記錄。 之後,就可以在這份空白記錄中移入新員工的資訊,並將它送回 Web 服務。
在開放式區域中,您會見到 newEmployeeRecord 資料來源資料物件已連結至 Web 服務。
由於詳細資料欄位和「更新」按鈕需要切換模式(用來執行更新和建立新員工),因此,它們必須在不同時間連結至兩個不同資料物件。 為了使這個步驟更容易執行,您將新增一個名稱為 switchingDataObject 的基本資料物件。 您將利用這個基本資料物件來切換 selectedEmployeeRecord 和 newEmployeeRecord 之間的文字欄位連結。
新的基本資料物件只會指向先前的練習所定義的另一個資料物件 (selectedEmployeeRecord)。 當您建立一個方法來通知這個基本資料物件使用先前所建立的 newEmployeeRecord 時,這個新的資料物件會變得很有用。 換言之,這個基本資料物件會扮演中間資料物件的角色來切換 selectedEmployeeRecord 資料物件和 newEmployeeRecord 資料物件,使應用程式中的視覺化元件能夠使用兩種不同的資料物件。現在,switchingDataObject 指向 selectedEmployeeRecord 且反映相同的值。
請完成下列步驟來處理員工詳細資料區段中的每個欄位:
請將下列程式碼新增至 DirectoryApp.java 類別中,就在最後一個右大括弧之前:
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"); } }
在這個步驟中,您新增按一下新建按鈕時的事件碼。 事件會通知 switchingDataObject 使用 newEmployeeRecord 資料物件,它會將模式旗標設成 "new",且會執行您在上一步驟中新增的 updateMode() 方法。
newButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { System.out.println("actionPerformed()"); // TODO 自動產生事件 Stub actionPerformed() } });
newButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { getSwitchingDataObject().setSourceObject(getNewEmployeeRecord()); getNewEmployeeRecord().refresh(); isNewMode = true; //將應用程式設成新建模式 updateMode(); //根據新建模式來變更 UI getLastNameField().grabFocus(); } });
現在,請注意,按鈕的動作現在配置成以 switchingDataObject 為 modifyEmployee 方法的引數:
按一下更新按鈕且在 Web 服務上完成動作之後,您要應用程式回復它的預設模式和行為。 如果要執行這個動作,您要在按鈕的動作連結程式上新增一個事件接聽器,以便在執行更新或新增之後,更新模式和重新整理表格。
重要事項:您正在將事件新增至按鈕中的連結程式,而不是連結至按鈕本身。
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() { public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) { System.out.println("afterActionPerformed()"); // TODO 自動產生事件 Stub afterActionPerformed() } public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} });
modifyEmployeeAction.addActionBinderListener(new jve.generated.IActionBinder.ActionBinderListener() { public void afterActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) { if (isNewMode) { //返回使用 selectedEmployeeRecord getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord()); //離開新建模式 isNewMode = false; updateMode(); } // 重新整理表格的資料物件 getLightEmployeeRecordRows().refresh(); } public void beforeActionPerformed(jve.generated.IActionBinder.ActionBinderEvent e) {} });
現在,當您執行 應用程式時,您可以按一下新建按鈕及新增新的員工記錄。