この課題を始める前に、「」を完了してください。

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

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

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

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

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

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

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

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

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

    newEmployeeRecord データ・オブジェクト、webServiceDataSource に接続

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

5. actionPerformed イベントを「新規」ボタンに追加する

この手順では、「新規」ボタンがクリックされたときのイベント・コードを追加します。 イベントは、switchingDataObject に対して newEmployeeRecord データ・オブジェクトを使用するように指示を出し、 モード・フラグを「新規」に設定して、直前の手順でユーザーが追加した updateMode() メソッドを実行します。

  1. デザイン・ビューで、「新規」ボタンを右マウス・ボタンでクリックし、 「イベント」>「actionPerformed」を選択する。 ビジュアル・エディターが汎用イベント・スタブでコードを生成し、次のようにコンソールに行を出力します。
    System.out.println("actionPerformed()");
  2. 生成されたこのスタブ (System.out.println 行) を次のコードに置き換える。
    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」をクリックする。

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

    引き数としての 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. System.out.println("afterActionPerformed()"); 行を次のコードで置き換える。
    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();

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

これで次の課題の「」に進む準備ができました。

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