< 이전 | 다음 >

학습 2.6: 새 직원을 추가하기 위한 조치 및 바인딩 설정

이 학습에서는 회사 디렉토리 응용프로그램을 사용하여 새 직원 레코드를 추가합니다.

새 직원을 추가하기 위한 응용프로그램의 작동이 상당히 복잡하고 동적이므로 이 연습은 더 복잡해질 수 밖에 없고 일부 소스 코드는 수동으로 변경해야 합니다. 또한 이 연습에서는 데이터 오브젝트의 몇몇 고급 기능을 보여주고 사용자 필요에 맞도록 바인더 및 데이터 오브젝트를 사용할 수 있는 방법에 대한 창의적 예제를 제공합니다.

다음 목록은 응용프로그램의 필수 작동을 설명합니다.

  • 새로 작성 단추를 클릭하면 다음과 같은 동작이 발생합니다.
    • 직원 테이블에서 선택사항이 지워지고 테이블은 사용 불가능하게 됩니다.
    • 테이블 선택사항을 지우면 삭제 단추를 사용할 수 없게 됩니다.
    • 필터 필드가 사용 불가능합니다.
    • 새 직원 ID를 제외하고 세부사항 필드에서 값이 모두 지워집니다.
    • 갱신 단추의 텍스트가 추가로 전환됩니다.
  • 추가 단추를 클릭하면 다음과 같은 동작이 발생합니다.
    • 세부사항 필드에 입력한 값은 새 직원 레코드로 디렉토리에 추가됩니다.
    • 테이블은 사용 가능하게 되고 값은 새로 고쳐집니다.
    • 필터 필드가 사용 가능합니다.
    • 추가 단추의 텍스트가 갱신으로 다시 전환됩니다.

createNewFullEmployeeRecord()를 호출하는 새 데이터 소스 데이터 오브젝트 추가

샘플 웹 서비스는 사용 가능한 다음 직원 ID 번호로 채워지도록 공백의 새 직원 레코드를 제공하는 createNewFullEmployeeRecord 서비스를 제공합니다. 이 공백 레코드는 새 직원 정보로 채우고 다시 웹 서비스에 제출할 수 있습니다.

  1. Java Visual Editor의 팔레트에서 데이터 오브젝트 드로어를 펼치고 데이터 소스 데이터 오브젝트를 선택하십시오.
  2. 마우스 포인터를 디자인 보기의 공백 영역 또는 자유 양식 영역으로 이동하고 왼쪽 마우스 단추를 클릭하여 데이터 소스 데이터 오브젝트를 놓으십시오. 새 데이터 소스 데이터 오브젝트가 자유 양식 영역에 추가되어 다음과 같이 표시됩니다.

    구성되지 않은 자유 양식의 데이터 소스 데이터 오브젝트

  3. 마우스 오른쪽 단추로 데이터 소스 데이터 오브젝트를 클릭하고 필드 이름 바꾸기를 선택하십시오. 데이터 오브젝트의 이름을 newEmployeeRecord로 바꾸십시오.
  4. newEmployeeRecord 데이터 오브젝트를 마우스 오른쪽 단추로 클릭하고 바인딩 특성을 선택하십시오. 데이터 바인딩 대화 상자가 열립니다.
  5. 데이터 소스 필드에서 webServiceDataSource를 선택하십시오.
  6. 서비스 필드에서 createNewFullEmployeeRecord()를 선택하십시오.
  7. 확인을 클릭하십시오.
자유 양식 영역에서 newEmployeeRecord 데이터 소스 데이터 오브젝트가 웹 서비스에 바인드되었는지 확인할 수 있습니다.

webServiceDataSource에 연결된 newEmployeeRecord 데이터 오브젝트

데이터 오브젝트를 쉽게 전환하기 위한 기본 데이터 오브젝트 추가

세부사항 필드와 갱신 단추는 모드를 전환해야 하므로(둘 다 갱신을 수행하고 새 직원을 작성하도록), 다른 시간에 다른 두 데이터 오브젝트에 바인드해야 합니다. 이 단계를 용이하게 하려면 기본 데이터 오브젝트 switchingDataObject를 추가하십시오. 이 기본 데이터 오브젝트를 사용하면 selectedEmployeeRecord 및 newEmployeeRecord 사이에 텍스트 필드에 대한 바인딩이 전환됩니다.

새 기본 데이터 오브젝트는 단지 이전 연습에서 정의한 다른 데이터 오브젝트(selectedEmployeeRecord)를 지시합니다. 또한 이 오브젝트는 이전에 작성한 newEmployeeRecord를 사용하도록 기본 데이터 오브젝트에 지시하는 메소드를 작성할 때 유용하게 사용됩니다. 즉, 이 기본 데이터 오브젝트는 selectedEmployeeRecord 데이터 오브젝트와 newEmployeeRecord 데이터 오브젝트 사이에 전환되는 중간 데이터로 작동하여, 응용프로그램의 비주얼 구성요소가 두 개의 다른 데이터 오브젝트에 대해 작동할 수 있습니다.
  1. Visual Editor 팔레트에서 기본 데이터 오브젝트를 선택하고 자유 양식 영역에 놓으십시오. basicDataObject가 추가됩니다.

    구성되지 않은 자유 양식의 기본 데이터 오브젝트

  2. 데이터 오브젝트의 이름을 switchingDataObject로 바꾸십시오.
  3. switchingDataObject에 대한 특성 보기에서 sourceObject 특성을 selectedEmployeeRecord로 설정하십시오. 특성에 대한 값 열의 드롭 다운 메뉴에서 selectedEmployeeRecord를 선택할 수 있습니다.

    이제 switchingDataObject는 selectedEmployeeRecord를 참조하여 같은 값을 반영합니다.

    selectedEmployeeRecord 데이터 오브젝트에 연결된 자유 양식의 switchingDataObject

각 직원 필드를 switchingDataObject에 리바인드

각 직원 세부사항 필드가 이미 selectedEmployeeRecord에 바인드되어 있어도 이들을 바로 switchingDataObject에 바인드할 수 있습니다. 필드를 바인드하고 나면 기존 직원 레코드를 수정하고 있는지 아니면 새 직원 레코드를 추가하고 있는지에 따라 필드의 데이터 오브젝트 사이를 동적으로 전환할 수 있습니다.

직원 세부사항 섹션의 필드마다 다음 단계를 완료하십시오.
  1. 필드를 선택하고 바인드 탭을 클릭하십시오.
  2. 필드 데이터 바인딩 대화 상자에서 switchingDataObject를 선택하십시오. 이 필드는 selectedEmployeeRecord에 이미 바인드되어 있습니다.

    switchingDataObject의 lastName 특성에 바인드된 lastNameField를 표시하는 필드 데이터 바인딩 대화 상자

  3. 필드가 정확한 데이터 오브젝트 특성에 바인드되어 있는지 확인하고 확인을 클릭하십시오. 디자인 보기에서 필드를 선택하면 지금은 바인더 선이 switchingDataObject를 향하고 있는 것을 볼 수 있습니다.

    switchingDataObject에 바인드된 세부사항 필드

모드를 갱신하고 전환하기 위한 플래그 및 메소드 정의

다음의 updateMode() 메소드는 모드 플래그가 새로 작성으로 설정되어 있는지 확인하고 그에 따라 응용프로그램 작동을 변경합니다. 기본적으로 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 데이터 오브젝트를 사용하도록 통지하고 모드 플래그를 "새로 작성"으로 설정한 후 앞 단계에서 추가한 updateMode() 메소드를 실행합니다.

  1. 디자인 보기에서 새로 작성 단추를 마우스 오른쪽으로 클릭하고, 이벤트 > actionPerformed를 선택하십시오. getNewButton() 메소드에 다음 코드가 생성됩니다.
    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()
       }
    });
  2. 생성된 이 스텁을 다음 코드로 변경하십시오.
    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();   }
    });

갱신 단추 리바인드

이전 학습에서는 웹 서비스에서 modifyEmployee 메소드를 사용하도록 갱신 단추를 프로그램했습니다. 이 조치는 SwingDataServiceAction으로 구현됩니다. SwingDataServiceAction 특성 중 하나가 서비스에 대한 인수로 작동하는 소스 오브젝트입니다. 수정 조치를 위한 소스 오브젝트는 현재 selectedEmployeeRecord로 설정되어 있습니다. 갱신 및 추가를 모두 제어하도록 단추를 프로그램하려면 단추 조치를 재구성하여 switchingDataObject를 modifyEmployee 서비스에 대한 인수로 사용해야 합니다.

  1. 디자인 보기에서 갱신 단추를 선택하십시오. selectedEmployeeRecord가 서비스 호출의 인수임을 표시하는 분홍색 점선 화살표에 주목하십시오.
  2. 갱신 단추의 바인드 탭을 클릭하십시오.
  3. 인수 필드에서 switchingDataObject를 선택하십시오.

    이제 switchingDataObject를 사용하는 갱신 단추에 대한 구성요소 조치 바인딩

  4. 확인을 클릭하십시오.

    이제는 modifyEmployee 메소드의 인수로 switchingDataObject를 사용하도록 단추 조치가 구성된 점에 주목하십시오.

    인수로 switchingDataObject를 사용하여 웹 서비스에 바인드된 갱신 단추

모드를 재설정하도록 갱신 단추의 바인더에 이벤트 추가

갱신 단추를 클릭하고 웹 서비스에서 조치를 완료한 후, 기본 모드 및 작동으로 다시 이동할 수 있습니다. 이를 수행하려면 갱신 또는 추가를 수행한 후 모드를 갱신하고 테이블을 새로 고칠 단추 조치 바인더에 대한 이벤트 리스너를 추가하십시오.

갱신 단추에 대한 getModifyEmployeeAction() 메소드에 다음 코드를 추가하십시오.
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) {} 
});

학습 체크포인트

이제 회사 디렉토리 응용프로그램을 실행할 때 새로 작성 단추를 클릭하여 새 직원 레코드를 추가할 수 있습니다.

< 이전 | 다음 >