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

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();
これで、「」アプリケーションを実行したときに、
「新規」ボタンをクリックして、新規従業員レコードを追加できます。
これで次の課題の「」に進む準備ができました。