< 前へ | 次へ >

演習 2.3: 詳細フィールドをテーブル選択にバインドする

直前の演習では、Web サービスで getLightEmployeeRecords() サービスが戻した lightEmployeeRecordRows データ・オブジェクトに employeesTable をバインドしました。 ここでは、テーブルで選択した従業員に基づいて、詳細フィールドに取り込みを行う必要があります。

選択したそれぞれの従業員の追加の詳細を得るには、 別のデータ・オブジェクトを使用します。 追加する selectedEmployeeRecord データ・オブジェクトは、getFullEmployeeRecord() サービスによって戻されます。 このサービスは、 テーブル上で選択された従業員の ID をパラメーターとして使用し、 電話番号および就労場所を含む従業員のさらなる詳細データを取得します。

行データ・オブジェクトにテーブルをバインドしたときに使用した JRowTableBinder を使用すると、 このステップは簡単になります。 JRowTableBinder を使うと、テーブル内の選択した要素を独立したデータ・オブジェクトとして 取り出すことができるので、これを getFullEmployeeRecord(java.lang.Integer) メソッドの パラメーターとして使用できます。 これによって、それぞれのテキスト・フィールドを selectedEmployeeRecord データ・オブジェクト内の対応するプロパティーに、 簡単にバインドできます。

Web サービスには、 それぞれの従業員のすべての詳細データを取得するための 2 つのサービスが組み込まれています。 テーブルには全従業員がリストされますが、テーブルには、データのサブセットだけが表示されます。 次に 1 人の従業員を選択したときに、選択されたその従業員に限り、この従業員の残りの情報を取り出すことができます。 Web サービスが、テーブルが要求する各従業員すべてのデータを送ると、 Web トラフィックが濃密になり、アプリケーションのパフォーマンスが低下することがあります。

たとえば、従業員のレコードに写真または添付資料が含まれている場合、 従業員全員のリストを作成するだけのために、全員の写真を取得することは望ましくないでしょう。 したがって、まず getLightEmployeeRecord サービスを使用してテーブルを作成し、 テーブルで選択された従業員のフル・レコードを getFullEmployeeRecord を 使って取り込みます。

「Last name」フィールドをバインドする

このステップでは、「Last name」フィールド を selectedEmployeeRecord データ・オブジェクトの lastName プロパティーにバインドします。

  1. 「Java Bean」ビューまたはデザイン・ビューで、ラストネーム (lastNameField) のための JTextField を選択する。 このデザイン域では、テキスト・フィールドに「バインド」タブが表示されます。

    テキスト・フィールドの「バインド」タブ

  2. バインド」タブをクリックして、 「フィールド・データのバインディング」ダイアログ・ボックスを開く。
  3. 新規データ・ソース・データ・オブジェクト」をクリックする。既存の jRowTableBinder データ・オブジェクトが正しいラストネームを戻しますが、 これには従業員のフル・レコードは含まれていません。 そこで、従業員のフル・レコードを表す新しいデータ・オブジェクトを作成する必要があります。
  4. ソース・タイプ」フィールドで、「Web サービス」が選択され、「データ・ソース」には、 「webServiceDataSource」が選択されていることを確認する。
  5. ソース・サービス」リストから、「getFullEmployeeRecord(java.lang.Integer)」を選択する。 「新規データ・ソース・データ・オブジェクト」ダイアログ・ボックスには、 テキスト・フィールドと互換性のあるデータ・オブジェクトを戻すサービスがリストされます。
  6. 名前」フィールドに、selectedEmployeeRecord と入力する。
  7. 引数」フィールドで「jRowTableBinder」を選択し、 「プロパティー」フィールドで「employeeID」を選択する。 これで、選択した行の従業員 ID が getFullEmployeeRecord() サービス・メソッドの引数に設定されます。
    注: getFullEmployeeRecord(java.lang.Integer) は引数として整数を必要とします。 フル・レコードを取り出すために、従業員テーブルで現在選択されている従業員 ID が使用できるとよいでしょう。 テーブルをバインドすると、ビジュアル・エディターは jRowTableBinder を 自動的に生成します。jRowTableBinder は、 従業員テーブルでの現在の選択を listen します。 これにより、整数パラメーターには、jRowTableBinder で選択した 行の employeeID が使用されます。

    「新規データ・ソース・データ・オブジェクト」ダイアログ・ボックス

  8. OK」をクリックする。
  9. 「フィールド・データのバインディング」ダイアログ・ボックスで、 「データ・オブジェクト」リストに、selectedEmployeeRecord が選択されていることを確認する。 selectedEmployeeRecord データ・オブジェクトには、 jRowTableBinder データ・オブジェクトより多くの使用可能なプロパティーがあることに注目してください。
  10. データ・オブジェクトのプロパティー」リストから、 「lastName」プロパティーを選択する。

    lastNameField の「フィールド・データのバインディング」ダイアログ・ボックス

  11. OK」をクリックする。これでアプリケーションの「Last name」フィールドは、 selectedEmployeeRecord データ・オブジェクトの「lastName」プロパティーにバインドされました。 これは、getFullEmployeeRecord() によって戻されます。

    selectedEmployeeRecord という名前の新しいデータ・オブジェクトが作成されて、 アプリケーションに追加されます。 データ・オブジェクトのビジュアル表示が次のイメージに示されているようにデザイン・ビューのフリー・フォーム域に追加されます。

    selectedEmployeeRecord データ・オブジェクト

    これで、デザイン域で「lastName」フィールドを選択すると、selectedEmployeeRecord にバインドされていることを線が示します。 線の中央にあるテキスト・バインダー・アイコンは、 このバインディングに使用されている SwingTextComponentBinder を表しています。 デザイン域で線またはバインダーを示すアイコンを選択すると、 「プロパティー」ビューでそのバインダーのプロパティーを調べることができます。

残りの詳細フィールドをバインドする

従業員の残りの各詳細フィールドをバインドするには、「Last name」フィールドと同様のプロセスを行いますが、 データ・オブジェクトを追加する必要はありません。 すでに 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」をクリックする。

テキスト・フィールドのバインディングが終了したならば、デザイン域は次のイメージのようになるはずです。

バインドされたテキスト・フィールドを示すグラフィカル・キャンバスのビュー

「Employee ID」フィールドを読み取り専用にする

「Employee ID」フィールドは、そのフィールド上で編集可能プロパティーが「false」に設定されているため、 使用不可になっています。 しかし、テキスト・フィールド・バインダーのデフォルト動作は、データ・オブジェクトに値が含まれていると、 使用可能の状態を変更します。 フィールドが最初の読み取り専用状態のままになるように、このバインダー動作をオフにすることができます。

バインダーが編集可能プロパティーを自動的に切り替えるのを防止するには、以下のようにします。
  1. 「Employee ID」フィールドを選択する。 そのフィールドのバインダーを表す線が、アイコンテキスト・バインダー・アイコンとともにデザイン域に表示されます。
  2. 「Employee ID」フィールドのバインダー テキスト・バインダー・アイコン アイコンをクリックする。
  3. 「プロパティー」ビューで、autoEditable プロパティーを false に変更する。 Enter キーを押す。

演習のチェックポイント

これで、アプリケーションを実行し、テーブルから従業員を選択したときに、 その従業員のレコードの詳細が詳細フィールドに表示されます。

< 前へ | 次へ >