이 연습에서는 응용프로그램으로 새 직원 레코드를 추가하는 방법에 대해 학습합니다. 새 직원을 추가하기 위한 응용프로그램의 작동이 상당히 복잡하고 동적이므로, 이 연습은 더 복잡해질 수 밖에 없고 일부 소스 코드는 수동으로 변경해야 합니다. 또한, 이 연습에서는 데이터 오브젝트의 몇몇 고급 기능을 보여주고 사용자 필요에 맞도록 바인더 및 데이터 오브젝트를 사용할 수 있는 방법에 대한 창의적 예제를 제공합니다.
다음 목록은 응용프로그램의 필수 작동을 설명합니다.
위 작동을 실행하려면 다음 단계를 수행하십시오.
샘플 웹 서비스는 사용 가능한 다음 직원 ID 번호로 채워지도록 공백의 새 직원 레코드를 제공하는 createNewFullEmployeeRecord 서비스를 제공합니다. 이 공백 레코드는 새 직원 정보로 채우고 다시 웹 서비스에 제출할 수 있습니다.
자유 양식 영역에서 newEmployeeRecord 데이터 소스 데이터 오브젝트가 웹 서비스에 바인드됨을 볼 수 있습니다.
세부사항 필드와 갱신 단추는 모드를 전환해야 하므로(둘 다 갱신을 수행하고 새 직원을 작성하도록), 다른 시간에 다른 두 데이터 오브젝트에 바인드해야 합니다. 이 단계를 용이하게 하려면 기본 데이터 오브젝트 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 데이터 오브젝트를 사용하도록 지시하고 모드 플래그를 "새로 작성"으로 설정한 후 이전 단계에서 추가한 updateMode() 메소드를 실행합니다.
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() } });
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 메소드의 인수로 switchingDataObject를 사용하도록 단추 조치가 구성된 점에 주목하십시오.
갱신 단추를 클릭하고 웹 서비스에서 조치를 완료한 후, 기본 모드 및 작동으로 다시 이동할 수 있습니다. 이를 수행하려면 갱신 또는 추가를 수행한 후 모드를 갱신하고 테이블을 새로 고칠 단추 조치 바인더에 대한 이벤트 리스너를 추가하십시오.
주: 현재 단추 자체가 아닌 단추 바인더에 이벤트를 추가하고 있는지 확인하십시오.
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) {} });
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) {} });
이제 응용프로그램을 실행할 때 새로 작성 단추를 클릭하여 새 직원 레코드를 추가할 수 있습니다.