この課題を始める前に、『』を完了しておく必要があります。

この課題では、 アプリケーションで、新規従業員レコードを追加できるようにします。 新規従業員を追加する場合、アプリケーションの動作はより複雑かつダイナミックであるため、この課題は本質的に少し複雑であり、 ユーザーはソース・コードの一部を手操作で変更する必要があります。 さらに、この課題では、データ・オブジェクトの高度な機能の一部を示して、 必要に応じてバインダーおよびデータ・オブジェクトおよびバインダーを使用できる方法の創造的な例を紹介します。

以下の項目は、アプリケーションで必須の動作の説明です。

この動作を追加するには、この課題で概要が示される次の手順を行います。

  1. createNewFullEmployeeRecord() を呼び出す新規データ・ソース・データ・オブジェクトを追加する
  2. データ・オブジェクトの切り替えを容易にするために基本データ・オブジェクトを追加する
  3. それぞれの従業員フィールドを switchingDataObject に再バインドする
  4. モードの更新および切り替えのフラグおよびメソッドを定義する
  5. actionPerformed イベントを「新規」ボタンに追加する
  6. 「更新」ボタンを再バインドする
  7. モードをリセットするためにイベントを「更新」ボタンのバインダーに追加する

1. createNewFullEmployeeRecord() を呼び出す新規データ・ソース・データ・オブジェクトを追加する

サンプル Web サービスは、次に使用可能な従業員 ID 番号を取り込むための新規で、空の従業員レコードを提供する createNewFullEmployeeRecord サービスを提供します。 この空のレコードは、新規従業員の情報を取り込んで、Web サービスにサブミットして戻されます。

  1. Java ビジュアル・エディターのパレット上で、データ・オブジェクト・ドロワーを展開して、 「データ・ソース・データ・オブジェクト」を選択する。
  2. デザイン・ビューまたはフリー・フォーム域にマウス・ポインターを移動して、 左クリックし、データ・ソース・データ・オブジェクトをドロップする。 新規データ・ソース・データ・オブジェクトが追加されて、フリー・フォーム域に表示されます。

    フリー・フォームのデータ・ソース・データ・オブジェクト (未構成)

  3. データ・ソース・ データ・オブジェクトを右クリックして、 「名前変更フィールド」を選択する。 データ・オブジェクトを newEmployeeRecord に名前変更します。
  4. newEmployeeRecord データ・オブジェクトを右クリックして、 「プロパティーのバインディング」を選択する。 「データ・バインディング」ダイアログ・ボックスが開きます。
  5. データ・ソース」フィールドで、「webServiceDataSource」を選択する。
  6. サービス」フィールドで、「createNewFullEmployeeRecord」を選択する。
  7. OK」をクリックする。

    webServiceDataSource に接続された newEmployeeRecord データ・オブジェクト

    フリー・フォーム域で、newEmployeeRecord データ・ソース・データ・オブジェクトが Web サービスにバインドされるのを見ます。

2. データ・オブジェクトの切り替えを容易にするために基本データ・オブジェクトを追加する

詳細フィールドおよび「更新」ボタンは、(新規従業員の更新および作成の両方の実行のため) モードを切り替える必要があるため、 これらはそれぞれ異なる時点で 2 つの異なるデータ・オブジェクトにバインドされる必要があります。 このステップを容易にするために、ユーザーは switchingDataObject という名前の基本データ・オブジェクトを追加します。 この基本データ・オブジェクトを使用して、 テキスト・フィールドのバインディングを selectedEmployeeRecord と newEmployeeRecord との間で切り替えます。

新規基本データ・オブジェクトは、 単に、以前の課題でユーザーが定義した別のデータ・オブジェクト (selectedEmployeeRecord) を指すだけです。 この新しいデータ・オブジェクトは、以前の課題で作成した newEmployeeRecord を使用するよう、 この基本データ・オブジェクトに指示するメソッドを作成するときに役立ちます。 すなわち、この基本データ・オブジェクトは、中間データ・オブジェクトとして機能します。 この中間データ・オブジェクトは selectedEmployeeRecord データ・オブジェクトと newEmployeeRecord データ・オブジェクトとの間で切り替えを行い、 対象のアプリケーション内のビジュアル・コンポーネントが 2 つの異なるデータ・オブジェクトと連動することを可能にします。
  1. ビジュアル・エディターのパレット上で、 「基本データ・オブジェクト」を選択し、フリー・フォーム・エリアにドロップする。 basicDataObject が追加されます。

    フリー・フォーム上の基本データ・オブジェクト (未構成)

  2. データ・オブジェクトを switchingDataObject に名前変更する。
  3. switchingDataObject の「プロパティー」ビューで、 sourceObject プロパティーを selectedEmployeeRecord に設定する。 selectedEmployeeRecord は、プロパティーの「Value」列のドロップダウン・メニューから選択できます。

    selectedEmployeeRecord データ・オブジェクトに接続されたフリー・フォーム上の switchingDataObject

    これで switchingDataObject は、selectedEmployeeRecord を参照し、同じ値を反映します。

3. それぞれの従業員フィールドを switchingDataObject に再バインドする

各従業員詳細フィールドが既に selectedEmployeeRecord にバインドされていても、 ここでは、それらを switchingDataObject にバインドします。 これらのフィールドをバインドしたならば、既存の従業員レコードを変更する場合か、 または新規従業員レコードを追加するかによって、 テキスト・フィールドのデータ・オブジェクト間を動的に切り替えることができます。

従業員詳細セクションのそれぞれのフィールドについて、次の手順を完了します。

  1. フィールドを選択して、「バインド」タブをクリックする。
  2. 「フィールド・データ・バインディング」ダイアログ・ボックスで、switchingDataObject を選択する。 これらのフィールドは selectedEmployeeRecord に以前バインドされています。

    switchingDataObject 上の「lastName」プロパティーにバインドされた「lastNameField」フィールドを表示する「フィールド・データ・バインディング」ダイアログ・ボックス

  3. フィールドが正しいデータ・オブジェクト・プロパティーにまだバインドされていることを確認して、 「OK」をクリックする。 デザイン・ビューでこのフィールドを選択すると、 これで、バインダーの線が switchingDataObject を指しているのを見ることができます。

    switchingDataObject にバインドされている詳細フィールド

4. モードの更新および切り替えのフラグおよびメソッドを定義する

次の updateMode() メソッドは、モード・フラグが「新規」に設定されているかどうか調べるために検査して、 状況に応じて、それに従ってアプリケーションの動作を変更します。 デフォルトでは、ブール・フラグの isNewMode は「false」に設定されています。 また updateMode() メソッドは、employeesTable とフィルター・フィールドを使用可能にし、 「更新」ボタンのテキストを「更新」に設定します。 isNewMode を「true」に設定すると、employeesTable は使用不可になり、 選択項目があると解除され、フィルター・フィールドは使用不可になり、 「更新」ボタンのテキストは「追加」に設定されます。

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");
   }
}

5. 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();
       }
    });
    

6.「更新」ボタンを再バインドする

直前の課題では、modifyEmployee メソッドを Web サービスで使用するために、 「更新」ボタンをプログラムしました。 そのアクションは、SwingDataServiceAction としてインプリメントされています。 SwingDataServiceAction のプロパティーの 1 つにソース・オブジェクトがあります。 これは、サービスの引数としての役割を果たします。 変更アクションのソース・オブジェクトは、現在、selectedEmployeeRecord に設定されています。 更新と追加の両方を制御するようにボタンをプログラムするためには、 switchingDataObject を modifyEmployee サービスの引数として使用するようにボタンのアクションを再構成します。
  1. デザイン・ビューで、「更新」ボタンを選択する。 ピンクの点線の矢印は、selectedEmployeeRecord がサービス呼び出しの引数であることを示していることに注目してください。
  2. 更新」ボタン上にある「バインド」タブをクリックする。
  3. 引数」フィールドで、switchingDataObject を選択する。

    switchingDataObject を使用している「更新」ボタンのコンポーネント・アクション・バインディング

  4. OK」をクリックする。

    これで、ボタンのアクションは、switchingDataObject を、modifyEmployee メソッドに対する 引数として使用するように構成されていることに注目してください。

    引数としての switchingDataObject を持つ Web サービスにバインドされた「更新」ボタン

7. モードをリセットするためにイベントを「更新」ボタンのバインダーに追加する

更新」ボタンをクリックして、Web サービス上のアクションが完了した後で、 アプリケーションをデフォルトのモードおよびボタン動作に戻したい場合があります。 これを行うには、更新および追加が実行された後にモードを更新し、テーブルを最新表示するアクション・バインダー上のイベント・リスナーを追加します。

  1. デザイン・ビューで、「更新」ボタンを選択する。 線は、データ・ソースへのボタンの接続を示しています。 線上には、このボタンの SwingDataServiceAction を表すアイコンがあり、 これはボタンのアクション・バインダーを表しています。
  2. ボタンのアクション・バインダー・アイコンを右クリックし、 「イベント」>「イベントの追加」を選択する。

    重要: イベントは、ボタンそのものに追加するのではなく、ボタンのバインダーに追加します。

  3. 「イベントの追加」ダイアログ・ボックスで、actionBinder ノードを展開して、 「afterActionPerformed」を選択する。
  4. 完了」をクリックする。 次のイベント・スタブが、ボタンの SwingDataServiceAction に追加されます。
    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) {}
    });
  5. 生成されたスタブを次のコードに置換する。:
    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) {}
    });
    

これで、「」アプリケーションを実行したときに、 「新規」ボタンをクリックして、新規従業員レコードを追加できます。

これで次の課題『』に進む準備が完了しました。

ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.