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

Урок 2.3: Связывание полей подробной информации с выделением таблицы

В предыдущем упражнении вы связывали таблицу employeesTable с объектом данных lightEmployeeRecordRows, возвращаемым службой getLightEmployeeRecords() в Web-службе. Теперь нужно заполнить поля подробной информации на основе сотрудника, выделенного в таблице.

Для получения дополнительных сведений для каждого выделенного сотрудника понадобится еще один объект данных. Будет добавлен объект selectedEmployeeRecord, который возвращает служба getFullEmployeeRecord(). Эта служба получает ИД выбранного сотрудника в таблице в качестве параметра и загружает дополнительные сведения о сотруднике, включая его номер телефона и место работы.

Объект JRowTableBinder, который использовался при связывании таблицы с объектом данных строки, упрощает этот шаг. JRowTableBinder помещает выбранный элемент в таблицу как отдельный объект данных, который можно использовать в качестве параметра для метода getFullEmployeeRecord(java.lang.Integer). Затем можно легко связать все текстовые поля с соответствующими свойствами в объекте данных selectedEmployeeRecord.

Дополнительная информация о Web-службе : Web-служба состоит из двух служб, получающих подробные сведения о каждом сотруднике. В таблице перечислены все сотрудники, и в ней отображается только подмножество данных. Таким образом, при выборе одного сотрудника можно получить остальную информацию только по выбранному сотруднику. Если бы Web-служба отправляла все данные по каждому сотруднику, когда их запрашивает таблица, поток данных в сети был бы слишком велик и от этого падало бы быстродействие приложения.

Например, если бы запись сотрудника содержала бы фотографию или вложение, то для получения полного списка сотрудников не было бы необходимости получать также и все фотографии. Таким образом, служба getLightEmployeeRecord используется для заполнения таблицы, а getFullEmployeeRecord получает целиком запись сотрудника, выбранного в таблице.

Связывание поля Фамилия

На этом шаге мы рассмотрим связывание поля Фамилия со свойством lastName в объекте данных selectedEmployeeRecord:

  1. В панели объектов JavaBean или в панели эскиза выберите JTextField для фамилии (lastNameField). В области эскиза на текстовом поле появится вкладка Связать.

    Вкладка Связать на текстовом поле

  2. Щелкните на вкладке Связать. Откроется окно связывания данных поля.
  3. Выберите Создать объект Источник данных. Хотя существующий объект данных jRowTableBinder возвращает правильную фамилию, он не возвращает запись сотрудника целиком. Необходимо создать новый объект данных, который будет представлять ее полностью.
  4. Убедитесь, что в поле Тип источника выбрано значениеWeb-служба, а в поле Источник данных - webServiceDataSource.
  5. В списке Исходная служба выберите getFullEmployeeRecord(java.lang.Integer). В окне создания нового объекта Источник данных будет список служб, которые возвращают объекты данных, совместимые с текстовым полем.
  6. В поле Имя введите selectedEmployeeRecord.
  7. В поле Аргумент выберите jRowTableBinder, в в поле Свойство - employeeID. ИД сотрудника для выбранной строки задается в качестве аргумента для служебного метода getFullEmployeeRecord().
    Прим.: В качестве аргумента getFullEmployeeRecord(java.lang.Integer) должно быть задано целое число. Для получения полной записи сотрудника используется ИД сотрудника, выбранного в таблице в настоящий момент. При связывании таблицы визуальный редактор автоматически создал редактор связей jRowTableBinder, который прослушивает текущий выбор в таблице сотрудников. В качестве целочисленного параметра используется employeeID выбранной строки в jRowTableBinder.

    Окно создания объекта Источник данных

  8. Нажмите кнопку OK.
  9. Убедитесь, что в окне Привязки данных полей в списке Объекты данных выбрано значение selectedEmployeeRecord. Обратите внимание, что для объекта данных selectedEmployeeRecord доступно больше свойств, чем для объекта данных jRowTableBinder.
  10. В списке Свойства объекта данных выберите свойство lastName.

    Окно Привязки данных полей для lastNameField

  11. Нажмите кнопку OK. Теперь поле фамилии в приложении связано со свойством lastName объекта данных selectedEmployeeRecord, который возвращается методом getFullEmployeeRecord().

    Новый объект данных с именем selectedEmployeeRecord создается и добавляется в приложение. Визуальное представление объекта данных добавляется в произвольную область панели эскиза, как показано на приведенном ниже рисунке:

    Объект данных selectedEmployeeRecord

    Теперь при выборе поля lastName в области эскиза привязка к selectedEmployeeRecord будет показана линией. Значок текстового редактора связей посередине линии представляет редактор связей SwingTextComponentBinder, который используется для связывания. При выборе линии или значка, представляющего редактор связей в области эскиза, можно просмотреть свойства редактора связей в панели Свойства.

Связывание остальных полей подробной информации

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

Для того чтобы связать поля, выполните следующие действия для каждого поля в разделе Подробные сведения о сотрудниках в приложении:
  1. Выберите поле в панели эскиза и щелкните на вкладке Связать.
  2. В окне Привязки данных полей из списка Объекты данных выберите selectedEmployeeRecord.
  3. Из списка Свойства объектов данных выберите соответствующее свойство для связываемого поля. В следующей схеме показаны свойства, с каждым из которых следует связать текстовое поле:
    Поле Свойство в объекте данных selectedEmployeeRecord
    lastNameField lastName
    firstNameField firstName
    idField employeeID
    emailField email
    phoneField phoneNum
    officeField location.office
    buildingField location.building
    siteField location.site
  4. Нажмите кнопку OK.

Когда вы закончите связывание текстовых полей, область эскиза должна будет выглядеть как на приведенном ниже рисунке:

Вид графического холста, на котором показаны связанные текстовые поля

Как сделать поле ИД сотрудника доступным только для чтения

Поле ИД сотрудника неактивно, поскольку его свойство доступности для редактирования задано в значение false. Впрочем, по умолчанию редактор связей для текстового поля изменяет состояние на доступное для редактирования, как только в объекте данных появляется значение. Такое поведение редактора связей можно отключить, и поле будет все время оставаться доступным только для чтения.

Для того чтобы редактор связей не переключал свойство доступности для редактирования автоматически, выполните следующие действия:
  1. Выберите поле ИД сотрудника. В области эскиза появится линия со значком Значок текстового редактора связей, представляющая редактор связей для поля.
  2. Щелкните на значке Значок текстового редактора связей редактора связей для поля ИД сотрудника.
  3. В панели Свойства измените свойство autoEditable на false. Нажмите Enter.

Полученные знания и навыки

Теперь, когда при запуске приложения вы будете выбирать пользователя из таблицы, в полях подробной информации будут отображаться подробные сведения о каждом сотруднике.

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