< 上一個課程 | 下一個課程 >

第 2.6 課:設定動作和連結來新增員工

在這一課,您將要啟動 My Company Directory 應用程式以新增員工記錄。

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

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

  • 按一下新建按鈕時會發生下列行為:
    • 取消選取員工表的選項,停用這份表格。
    • 清除表格選項會導致刪除按鈕停用。
    • 停用過濾器欄位。
    • 除了新員工 ID 之外,會清除詳細資料欄位的任何值。
    • 更新按鈕上的文字會改成新增
  • 按一下新增按鈕時會發生下列行為:
    • 輸入詳細資料欄位的值會新增到目錄中,成為一項新的員工記錄。
    • 啟用表格,重新整理值。
    • 啟用過濾器欄位。
    • 新增按鈕上的文字會切換回更新

新增資料來源資料物件來呼叫 createNewFullEmployeeRecord()

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

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

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

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

newEmployeeRecord 資料物件,連接至 webServiceDataSource

新增基本資料物件來協助切換資料物件

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

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

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

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

    現在,switchingDataObject 參照 selectedEmployeeRecord 且反映相同的值:

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

將每一個員工欄位重新連結至 switchingDataObject

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

對於「員工詳細資料」區段中的每一個欄位,請完成下列步驟:
  1. 選取欄位,按一下連結標籤。
  2. 在「欄位資料連結」對話框中,選取 switchingDataObject。 先前已將欄位連結至 selectedEmployeeRecord。

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

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

    連結至 switchingDataObject 的詳細資料欄位

定義旗標和方法來更新和切換模式

下列 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");
   }
}

將 actionPerformed 事件新增至「新建」按鈕

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

  1. 在設計視圖中,用滑鼠右鍵按一下新建按鈕, 選取事件 > actionPerformed。 getNewButton() 方法中會產生下列程式碼:
    newButton.addActionListener(new java.awt.event.ActionListener() { 
       	public void actionPerformed(java.awt.event.ActionEvent e) {
          System.out.println("actionPerformed()"); // TODO 自動產生的事件 Stub actionPerformed()
       }
    });
  2. 將產生的 Stub 取代為下列程式碼:
    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();   }
    });

重新連結「更新」按鈕

在上一個,您已設計更新按鈕來使用 Web 服務的 modifyEmployee 方法。 這個動作實作成 SwingDataServiceAction。SwingDataServiceAction 的內容之一是用來作為服務引數的來源物件。 修改動作的來源物件目前設為 selectedEmployeeRecord。 為了設計按鈕來控制更新和新增,您將重新配置按鈕的動作來使用 switchingDataObject 做為 modifyEmployee 服務的引數。

  1. 在設計視圖中,選取更新按鈕。 請注意,粉紅色虛線箭頭表示 selectedEmployeeRecord 是服務呼叫的引數。
  2. 按一下更新按鈕上的連結標籤。
  3. 引數欄位中,選取 switchingDataObject。

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

  4. 按一下確定

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

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

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

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

將下列程式碼新增至「更新」按鈕的 getModifyEmployeeAction() 方法:
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) {} 
});

課程回顧

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

< 上一個課程 | 下一個課程 >