この課題を始める前に、『』を完了しておく必要があります。
この課題では、
アプリケーションで、新規従業員レコードを追加できるようにします。
新規従業員を追加する場合、アプリケーションの動作はより複雑かつダイナミックであるため、この課題は本質的に少し複雑であり、
ユーザーはソース・コードの一部を手操作で変更する必要があります。
さらに、この課題では、データ・オブジェクトの高度な機能の一部を示して、
必要に応じてバインダーおよびデータ・オブジェクトおよびバインダーを使用できる方法の創造的な例を紹介します。
以下の項目は、アプリケーションで必須の動作の説明です。
- 「新規」ボタンをクリックしたときに、次の動作が発生します。
- 従業員テーブルの選択が解除され、テーブルが使用不可になる。
- テーブル選択をクリアすると、「削除」ボタンが使用不可になる。
- 「フィルター」フィールドが使用不可になる。
- 新規従業員 ID を除いて、詳細フィールドのすべての値が消去される。
- 「更新」ボタンのテキストが「追加」に変わる。
- 「追加」ボタンをクリックしたときに、次の動作が発生します。
- 詳細フィールドに入力した値は、新規従業員レコードとして登録簿に追加される。
- テーブルが使用可能になり、値が更新される。
- 「フィルター」フィールドが使用可能になる。
- 「追加」ボタンのテキストが「更新」に戻る。
この動作を追加するには、この課題で概要が示される次の手順を行います。
- createNewFullEmployeeRecord() を呼び出す新規データ・ソース・データ・オブジェクトを追加する。
- データ・オブジェクトの切り替えを容易にするために基本データ・オブジェクトを追加する。
- それぞれの従業員フィールドを switchingDataObject に再バインドする。
- モードの更新および切り替えのフラグおよびメソッドを定義する。
- actionPerformed イベントを「新規」ボタンに追加する。
- 「更新」ボタンを再バインドする。
- モードをリセットするためにイベントを「更新」ボタンのバインダーに追加する。
1. createNewFullEmployeeRecord() を呼び出す新規データ・ソース・データ・オブジェクトを追加する
サンプル Web サービスは、次に使用可能な従業員 ID 番号を取り込むための新規で、空の従業員レコードを提供する createNewFullEmployeeRecord サービスを提供します。
この空のレコードは、新規従業員の情報を取り込んで、Web サービスにサブミットして戻されます。
- Java ビジュアル・エディターのパレット上で、データ・オブジェクト・ドロワーを展開して、
「データ・ソース・データ・オブジェクト」を選択する。
- デザイン・ビューまたはフリー・フォーム域にマウス・ポインターを移動して、
左クリックし、データ・ソース・データ・オブジェクトをドロップする。
新規データ・ソース・データ・オブジェクトが追加されて、フリー・フォーム域に表示されます。

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

フリー・フォーム域で、newEmployeeRecord データ・ソース・データ・オブジェクトが Web サービスにバインドされるのを見ます。
2. データ・オブジェクトの切り替えを容易にするために基本データ・オブジェクトを追加する
詳細フィールドおよび「更新」ボタンは、(新規従業員の更新および作成の両方の実行のため) モードを切り替える必要があるため、
これらはそれぞれ異なる時点で 2 つの異なるデータ・オブジェクトにバインドされる必要があります。
このステップを容易にするために、ユーザーは switchingDataObject
という名前の基本データ・オブジェクトを追加します。
この基本データ・オブジェクトを使用して、
テキスト・フィールドのバインディングを selectedEmployeeRecord と newEmployeeRecord との間で切り替えます。
新規基本データ・オブジェクトは、
単に、以前の課題でユーザーが定義した別のデータ・オブジェクト (selectedEmployeeRecord) を指すだけです。
この新しいデータ・オブジェクトは、以前の課題で作成した newEmployeeRecord を使用するよう、
この基本データ・オブジェクトに指示するメソッドを作成するときに役立ちます。
すなわち、この基本データ・オブジェクトは、中間データ・オブジェクトとして機能します。
この中間データ・オブジェクトは selectedEmployeeRecord データ・オブジェクトと
newEmployeeRecord データ・オブジェクトとの間で切り替えを行い、
対象のアプリケーション内のビジュアル・コンポーネントが 2 つの異なるデータ・オブジェクトと連動することを可能にします。
- ビジュアル・エディターのパレット上で、
「基本データ・オブジェクト」を選択し、フリー・フォームにドロップする。
basicDataObject が追加されます。

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

これで switchingDataObject は、selectedEmployeeRecord を参照し、同じ値を反映します。
3. それぞれの従業員フィールドを switchingDataObject に再バインドする
各従業員詳細フィールドが既に selectedEmployeeRecord にバインドされていても、
ここでは、それらを switchingDataObject にバインドします。
これらのフィールドをバインドしたならば、既存の従業員レコードを変更する場合か、
または新規従業員レコードを追加するかによって、
テキスト・フィールドのデータ・オブジェクト間を動的に切り替えることができます。
従業員詳細セクションのそれぞれのフィールドについて、次の手順を完了します。
- フィールドを選択して、「バインド」タブをクリックする。
- 「フィールド・データ・バインディング」ダイアログ・ボックスで、switchingDataObject を選択する。
これらのフィールドは selectedEmployeeRecord に以前バインドされています。

- フィールドが正しいデータ・オブジェクト・プロパティーにまだバインドされていることを確認して、
「OK」をクリックする。
デザイン・ビューでこのフィールドを選択すると、
これで、バインダーの線が 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() メソッドを実行します。
- デザイン・ビューで、「新規」ボタンを右クリックし、
「イベント」>「actionPerformed」を選択する。
ビジュアル・エディターが、汎用イベント・スタブで、単にコンソールに行を印刷する出力コードを生成します。
System.out.println("actionPerformed()");
- 生成されたこのスタブ (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 サービスの引き数として使用するようにボタンのアクションを再構成します。
- デザイン・ビューで、「更新」ボタンを選択する。
ピンクの点線の矢印は、selectedEmployeeRecord がサービス呼び出しの引き数であることを示していることに注目してください。
- 「更新」ボタン上にある「バインド」タブをクリックする。
- 「引き数」フィールドで、switchingDataObject を選択する。
- 「OK」をクリックする。
これで、ボタンのアクションは、switchingDataObject を、modifyEmployee メソッドに対する 引き数として使用するように構成されていることに注目してください。

7. モードをリセットするためにイベントを「更新」ボタンのバインダーに追加する
「更新」ボタンをクリックして、Web サービス上のアクションが完了した後で、
アプリケーションをデフォルトのモードおよびボタン動作に戻したい場合があります。
これを行うには、更新および追加が実行された後にモードを更新し、テーブルを最新表示するアクション・バインダー上のイベント・リスナーを追加します。
- デザイン・ビューで、「更新」ボタンを選択する。
線は、データ・ソースへのボタンの接続を示しています。
線上には、このボタンの SwingDataServiceAction を表すアイコンがあり、
これはボタンのアクション・バインダーを表しています。
- ボタンのアクション・バインダー・アイコンを右クリックし、
「イベント」>「イベントの追加」を選択する。
重要: イベントは、ボタンそのものに追加するのではなく、ボタンのバインダーに追加します。
- 「イベントの追加」ダイアログ・ボックスで、actionBinder ノードを展開して、
「afterActionPerformed」を選択する。
- 「完了」をクリックする。
次のイベント・スタブが、ボタンの 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) {}
});
- 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();
これで、「」アプリケーションを実行したときに、
「新規」ボタンをクリックして、新規従業員レコードを追加できます。
これで次の課題『』に進む準備が完了しました。