您必須先完成,才能開始這個練習。

在這個練習中,您將啟用 應用程式來新增新的員工記錄。 由於應用程式新增新員工的行為動態而複雜,因此,這個練習先天上就比較複雜,程式碼必須進行一些手動變更。 另外,這個練習也示範了資料物件的一些進階功能,且提供了可配合您的需求來使用連結程式和資料物件的創造性的方式範例。

下列清單說明應用程式的必要行為:

如果要新增這個行為,請完成這個練習所概述的下列步驟:

  1. 新增呼叫 createNewFullEmployeeRecord() 的新資料來源資料物件
  2. 新增基本資料物件,以協助切換資料物件
  3. 將每個員工欄位重新連結至 switchingDataObject
  4. 定義更新和切換模式的旗標和方法
  5. 將 actionPerformed 事件新增至「新建」按鈕中
  6. 重新連結「更新」按鈕
  7. 將事件新增至「更新」按鈕中的連結程式來重設模式

1. 新增呼叫 createNewFullEmployeeRecord() 的新資料來源資料物件:

Web 服務範例提供一項 createNewFullEmployeeRecord 服務,這項服務則提供一份將移入下個可用的員工 ID 號碼的新空白員工記錄。 之後,就可以在這份空白記錄中移入新員工的資訊,並將它送回 Web 服務。

  1. 在 Java 視覺化編輯器的選用區中,展開資料物件抽屜,選取資料來源資料物件
  2. 將滑鼠指標移到設計視圖的空白區域或開放式區域,按一下滑鼠左鍵來放下資料來源資料物件。 這時會在開放式區域中,新增和顯示新的資料來源資料物件:

    開放式版面區中的資料來源資料物件。未配置

  3. 用滑鼠右鍵按一下資料來源資料物件,選取重新命名欄位。 請將資料物件重新命名為 newEmployeeRecord
  4. 用滑鼠右鍵按一下 newEmployeeRecord 資料物件,選取連結內容。這時會開啟「資料連結」對話框。
  5. 資料來源欄位中,選取 webServiceDataSource。
  6. 服務欄位中,選取 createNewFullEmployeeRecord()。
  7. 按一下確定

    newEmployeeRecord 資料物件,連接至 webServiceDataSource

    在開放式區域中,您會見到 newEmployeeRecord 資料來源資料物件已連結至 Web 服務。

2. 新增基本資料物件,以協助切換資料物件:

由於詳細資料欄位和「更新」按鈕需要切換模式(用來執行更新和建立新員工),因此,它們必須在不同時間連結至兩個不同資料物件。 為了使這個步驟更容易執行,您將新增一個名稱為 switchingDataObject 的基本資料物件。 您將利用這個基本資料物件來切換 selectedEmployeeRecord 和 newEmployeeRecord 之間的文字欄位連結。

新的基本資料物件只會指向先前的練習所定義的另一個資料物件 (selectedEmployeeRecord)。 當您建立一個方法來通知這個基本資料物件使用先前所建立的 newEmployeeRecord 時,這個新的資料物件會變得很有用。 換言之,這個基本資料物件會扮演中間資料物件的角色來切換 selectedEmployeeRecord 資料物件和 newEmployeeRecord 資料物件,使應用程式中的視覺化元件能夠使用兩種不同的資料物件。
  1. 在視覺化編輯器選用區中,選取基本資料物件,將它放在開放式區域中。這時會新增一個 basicDataObject。

    開放式區域中的基本資料物件,未配置

  2. 將資料物件重新命名為 switchingDataObject
  3. 在 switchingDataObject 的「內容」視圖中,將 sourceObject 內容設成 selectedEmployeeRecord。 您可以從內容的「值」直欄下拉功能表中,選取 selectedEmployeeRecord。

    開放式區域中的 switchingDataObject,連接於 selectedEmployeeRecord 資料物件

    現在,switchingDataObject 指向 selectedEmployeeRecord 且反映相同的值。

3. 將每個員工欄位重新連結至 switchingDataObject:

雖然每個員工詳細資料欄位都已經連結至 selectedEmployeeRecord,現在,您仍要將它們連結至 switchingDataObject。 連結欄位之後,您可以依照您是修改現有的員工記錄或新增新的員工記錄來動態切換欄位的資料物件。

請完成下列步驟來處理員工詳細資料區段中的每個欄位:

  1. 選取欄位,按一下連結標籤。
  2. 在「欄位資料連結」對話框中,選取 switchingDataObject。 您先前已將欄位連結至 selectedEmployeeRecord。

    顯示 lastNameField 已連結至 switchingDataObject 之 lastName 內容的「欄位資料連結」對話框

  3. 確定欄位仍連結至正確的資料物件內容,再按一下確定。如果您在設計視圖中選取了欄位,您可能會發現,連結程式線條現在指向 switchingDataObject。

    連結至 switchingDataObject 的詳細資料欄位

4. 定義更新和切換模式的旗標和方法:

下列 updateMode() 方法會檢查模式旗標是否設為新建,再據此變更應用程式的行為。 依預設,Boolean 旗標 isNewMode 會設為 false,updateMode() 方法會啟用員工表和過濾欄位,以及將更新按鈕的文字設成「更新」。 如果 isNewMode 設為 true,就會停用員工表,取消選取任何選項,也會停用過濾欄位,且會將更新按鈕的文字設成「新增」。

請將下列程式碼新增至 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");
	}
}

5. 將 actionPerformed 事件新增至「新建」按鈕中:

在這個步驟中,您新增按一下新建按鈕時的事件碼。 事件會通知 switchingDataObject 使用 newEmployeeRecord 資料物件,它會將模式旗標設成 "new",且會執行您在上一步驟中新增的 updateMode() 方法。

  1. 在設計視圖中,用滑鼠右鍵按一下新建按鈕,選取事件 > actionPerformed。 視覺化編輯器會產生程式碼,其中含有只在主控台中印出一行的一般事件 Stub:
    System.out.println("actionPerformed()");
  2. 用下列程式碼來取代這個產生的 Stub(System.out.println 行):
    getSwitchingDataObject().setSourceObject(getNewEmployeeRecord());
    getNewEmployeeRecord().refresh();
    
    isNewMode = true; //將應用程式設成新建模式
    updateMode(); //根據新建模式來變更 UI
    getLastNameField().grabFocus();

6. 重新連結「更新」按鈕:

在先前的練習中,您將更新按鈕設計成會在 Web 服務上使用 modifyEmployee 方法。 這個動作實作成 SwingDataServiceAction。SwingDataServiceAction 的內容之一是用來作為服務引數的來源物件。 修改動作的來源物件目前設為 selectedEmployeeRecord。 為了設計按鈕來控制更新和新增,您將重新配置按鈕的動作,以 switchingDataObject 為 modifyEmployee 服務的引數:
  1. 在設計視圖中,選取更新按鈕。 請注意,粉紅色帶點箭頭顯示 selectedEmployeeRecord 是服務呼叫的引數。
  2. 按一下更新按鈕上的連結標籤。
  3. 引數欄位中,選取 switchingDataObject。

    「更新」按鈕的元件動作連結現在使用 switchingDataObject

  4. 按一下確定

    現在,請注意,按鈕的動作現在配置成以 switchingDataObject 為 modifyEmployee 方法的引數:

    「更新」按鈕以 switchingDataObject 為引數連結至 Web 服務

7. 將事件新增至「更新」按鈕中的連結程式來重設模式:

按一下更新按鈕且在 Web 服務上完成動作之後,您要應用程式回復它的預設模式和行為。 如果要執行這個動作,您要在按鈕的動作連結程式上新增一個事件接聽器,以便在執行更新或新增之後,更新模式和重新整理表格。

  1. 在設計視圖中,選取更新按鈕。 這時會有一條線顯示按鈕至資料來源的連線。 這條線上有一個代表按鈕之 SwingDataServiceAction 的圖示,它代表按鈕的動作連結程式。
  2. 用滑鼠右鍵按一下按鈕的動作連結程式圖示,選取事件 > 新增事件

    重要事項:您正在將事件新增至按鈕中的連結程式,而不是連結至按鈕本身。

  3. 在「新增事件」對話框中,展開 actionBinder 節點,選取 afterActionPerformed
  4. 按一下完成。這時會將下列事件 Stub 新增到按鈕的 SwingDataServiceAction 中:
    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) {} 
    });
  5. System.out.println("afterActionPerformed()"); 這一行程式碼改成下列程式碼:
    if (isNewMode) {
    	//返回使用 selectedEmployeeRecord
    	getSwitchingDataObject().setSourceObject(getSelectedEmployeeRecord());
    	//離開新建模式
    	isNewMode = false; 
    	updateMode();
    }
    // 重新整理表格的資料物件
    getLightEmployeeRecordRows().refresh();

現在,當您執行 應用程式時,您可以按一下新建按鈕及新增新的員工記錄。

現在您已準備好開始進行下一個練習 -

使用條款 | 讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.