< Назад | Далее >

Урок 2.6: Настройка действий и привязок для добавления нового сотрудника

В этом уроке в приложение My Company Directory будет реализована возможность добавлять новые записи сотрудников.

Поскольку при добавлении нового сотрудника в приложении выполняются более сложные и динамичные действия, это упражнение также сложнее предыдущих, поскольку вам потребуется вручную вносить некоторые изменения в исходный код. Кроме того, в этом упражнении показаны некоторые расширенные возможности объектов данных. Здесь на творческом примере проиллюстрированы такие способы применения редакторов связей и объектов данных, при которых они наилучшим образом выполняют поставленные задачи.

В приведенном ниже списке перечислены обязательные функции приложения:

  • При нажатии на кнопку Создать выполняются следующие действия:
    • Очищается выделение в таблице сотрудников и таблица становится неактивной.
    • Очистка выделения таблицы делает неактивной кнопку Удалить.
    • Поле Фильтр становится неактивным.
    • Из полей подробной информации удаляются все значения кроме ИД нового сотрудника.
    • Текст в кнопке Обновить заменяется наДобавить.
  • При нажатии на кнопку Добавить выполняются следующие действия:
    • Значения, введенные в полях подробной информации, добавляются в каталог в качестве новой записи о сотруднике.
    • Таблица становится активной и значения обновляются.
    • Поле Фильтр становится активным.
    • Текст в кнопке Добавить заменяется на Обновить.

Добавление нового объекта данных источника данных, вызывающего createNewFullEmployeeRecord()

В примере Web-службы предусмотрена служба createNewFullEmployeeRecord, предоставляющая новую, пустую запись о сотруднике, которая заполняется следующим доступным номером ИД сотрудника. Эту пустую запись можно заполнить сведениями о новом сотруднике и отправить обратно в Web-службу.

  1. В палитре визуального редактора для Java разверните лоток Объекты данных и выберите Объект данных источника данных.
  2. Поместите указатель мыши на пустой области в панели эскиза или в произвольной области и щелкните левой кнопкой для того, чтобы поместить объект данных источника данных. Новый объект данных источника данных будет добавлен и отобразится в произвольной области:

    Объект данных источника данных в произвольной области. Не настроен.

  3. Щелкните правой кнопкой мыши на объекте данных источника данных и выберите Переименовать поле. Переименуйте объект данных в newEmployeeRecord.
  4. Щелкните правой кнопкой мыши на объекте данных newEmployeeRecord и выберите Свойства связывания. Откроется окно связывания данных.
  5. В поле Источник данных выберите webServiceDataSource
  6. В поле Служба выберите createNewFullEmployeeRecord()
  7. Нажмите кнопку OK.
В произвольной области видно, что объект данных источника данных newEmployeeRecord связан с Web-службой.

Объект данных newEmployeeRecord, подключенный к webServiceDataSource

Добавление простого объекта данных, обеспечивающее переключение объектов данных

Поскольку для полей подробной информации и кнопки Обновить требуется переключение режимов (как для обновления, так и для создания нового сотрудника), они должны быть связаны в разное время с двумя различными объектами данных. Для того чтобы обеспечить эту возможность, нужно добавить простой объект данных с именем switchingDataObject. Простой объект данных будет применяться для переключения привязки текстовых полей между selectedEmployeeRecord и newEmployeeRecord.

Новый простой объект данных просто указывает на другой объект данных (selectedEmployeeRecord), определенный в предыдущем упражнении. Этот новый объект данных применяется при создании метода, с помощью которого простой объект данных использует созданный ранее newEmployeeRecord. Другими словами, этот простой объект данных будет выступать в роли промежуточного объекта данных, который переключается между объектами данных selectedEmployeeRecord и newEmployeeRecord, что позволяет визуальным компонентам в приложении работать с двумя различными объектами данных.
  1. В палитре визуального редактора выберите Простой объект данных, и поместите его в произвольную область. Будет добавлен объект basicDataObject.

    Простой объект данных в произвольной области, не настроен

  2. Переименуйте объект данных в switchingDataObject
  3. В панели свойств объекта switchingDataObject задайте selectedEmployeeRecord в качестве значения свойства sourceObject. selectedEmployeeRecord можно выбрать в выпадающем меню в столбце свойства Значение.

    Теперь switchingDataObject ссылается на selectedEmployeeRecord и отражает такие же значения:

    switchingDataObject в произвольной области, подключенный к объекту данных selectedEmployeeRecord

Повторное связывание всех сотрудников с switchingDataObject

Несмотря на то, что все поля подробных сведений о сотрудниках уже связаны с selectedEmployeeRecord, теперь их нужно связать с switchingDataObject. После связывания полей можно динамически переключаться между объектами данных для полей в зависимости от того, редактируете ли вы существующую запись о сотруднике или добавляете новую запись.

Для каждого из полей в разделе Подробные сведения о сотрудниках выполните следующие действия:
  1. Выберите поле и щелкните на вкладке Связать.
  2. В окне Привязки данных таблицы выберите switchingDataObject. Ранее вы связали поля с selectedEmployeeRecord.

    lastNameField, привязанное к свойству lastName объекта switchingDataObject в окне Привязки данных полей

  3. Убедитесь, что поле связано с нужным свойством объекта данных и нажмите кнопку OK. При выборе поля в панели эскиза вы увидите, что линии редактора связей теперь указывают на 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, присваивает флагу режима значение "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 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; //переключение приложения в другой режим
          updateMode(); //изменение пользовательского интерфейса в новом режиме
          getLastNameField().grabFocus();
       }
    });

Повторное связывание кнопки Обновить

В предыдущем уроке мы программировали применение кнопкой Обновить метода modifyEmployee в Web-службе. Это действие реализовано как SwingDataServiceAction. Одно из свойств действия SwingDataServiceAction является исходным объектом, который выступает в роли аргумента для службы. В качестве исходного объекта для действия редактирования в настоящее время задан selectedEmployeeRecord. Для того чтобы кнопка управляла как обновлением, так и добавлением, нужно перенастроить ее действие для использования switchingDataObject в качестве аргумента в службе modifyEmployee.

  1. В панели эскиза выберите кнопку Обновить. Обратите внимание на розовую пунктирную стрелку, которая показывает, что selectedEmployeeRecord является аргументом для вызова службы.
  2. Щелкните на вкладке Связать для кнопки Обновить.
  3. В поле Аргумент выберите switchingDataObject.

    Связывание действий компонентов для кнопки Обновить, которая теперь использует switchingDataObject

  4. Нажмите кнопку OK.

    Теперь обратите внимание, что теперь действие кнопки настроено для использования switchingDataObject в качестве аргумента в методе modifyEmployee:

    Кнопка Обновить, связанная с Web-службой с switchingDataObject в качестве аргумента

Добавление события в редактор связей кнопки Обновить для сброса режима

После того при нажатии кнопки Обновить действие в 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 при нажатии кнопки Создать будет создаваться новая запись о сотруднике.

< Назад | Далее >