この課題では、 アプリケーションで、新規従業員レコードを追加できるようにします。 新規従業員を追加する場合、アプリケーションの動作はより複雑かつダイナミックであるため、この課題は本質的に少し複雑であり、 ユーザーはソース・コードの一部を手操作で変更する必要があります。 さらに、この課題では、データ・オブジェクトの高度な機能の一部を示して、 必要に応じてバインダーおよびデータ・オブジェクトおよびバインダーを使用できる方法の創造的な例を紹介します。
以下の項目は、アプリケーションで必須の動作の説明です。
この動作を追加するには、この課題で概要が示される次の手順を行います。
サンプル Web サービスは、次に使用可能な従業員 ID 番号を取り込むための新規で、空の従業員レコードを提供する createNewFullEmployeeRecord サービスを提供します。 この空のレコードは、新規従業員の情報を取り込んで、Web サービスにサブミットして戻されます。
フリー・フォーム域で、newEmployeeRecord データ・ソース・データ・オブジェクトが Web サービスにバインドされるのを見ます。
詳細フィールドおよび「更新」ボタンは、(新規従業員の更新および作成の両方の実行のため) モードを切り替える必要があるため、 これらはそれぞれ異なる時点で 2 つの異なるデータ・オブジェクトにバインドされる必要があります。 このステップを容易にするために、ユーザーは switchingDataObject という名前の基本データ・オブジェクトを追加します。 この基本データ・オブジェクトを使用して、 テキスト・フィールドのバインディングを selectedEmployeeRecord と newEmployeeRecord との間で切り替えます。
新規基本データ・オブジェクトは、 単に、以前の課題でユーザーが定義した別のデータ・オブジェクト (selectedEmployeeRecord) を指すだけです。 この新しいデータ・オブジェクトは、以前の課題で作成した newEmployeeRecord を使用するよう、 この基本データ・オブジェクトに指示するメソッドを作成するときに役立ちます。 すなわち、この基本データ・オブジェクトは、中間データ・オブジェクトとして機能します。 この中間データ・オブジェクトは selectedEmployeeRecord データ・オブジェクトと newEmployeeRecord データ・オブジェクトとの間で切り替えを行い、 対象のアプリケーション内のビジュアル・コンポーネントが 2 つの異なるデータ・オブジェクトと連動することを可能にします。これで switchingDataObject は、selectedEmployeeRecord を参照し、同じ値を反映します。
従業員詳細セクションのそれぞれのフィールドについて、次の手順を完了します。
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"); } }
このステップでは、「新規」ボタンがクリックされたときのイベント・コードを追加します。 イベントは、switchingDataObject に対して newEmployeeRecord データ・オブジェクトを使用するように指示を出し、 モード・フラグを「新規」に設定して、直前のステップでユーザーが追加した updateMode() メソッドを実行します。
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() } });
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(); } });
これで、ボタンのアクションは、switchingDataObject を、modifyEmployee メソッドに対する 引数として使用するように構成されていることに注目してください。
「更新」ボタンをクリックして、Web サービス上のアクションが完了した後で、 アプリケーションをデフォルトのモードおよびボタン動作に戻したい場合があります。 これを行うには、更新および追加が実行された後にモードを更新し、テーブルを最新表示するアクション・バインダー上のイベント・リスナーを追加します。
重要: イベントは、ボタンそのものに追加するのではなく、ボタンのバインダーに追加します。
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) {} });
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) {} });
これで、「」アプリケーションを実行したときに、 「新規」ボタンをクリックして、新規従業員レコードを追加できます。