在开始此练习之前,必须完成

在此练习中,将启用应用程序来添加新的职员记录。因为对于添加新职员来说,应用程序的行为比较复杂并且是动态的,所以此练习本身会比较复杂并且会要求您对源代码进行一些手工更改。另外,此练习会演示数据对象的一些高级功能,并且提供了一个具有创意的方法示例,可以借助这些方法使用绑定程序和数据对象来满足您的需要。

以下列表描述应用程序的必需行为:

要添加此行为,完成此练习中概括的下列步骤:

  1. 添加调用 createNewFullEmployeeRecord() 的新的数据源数据对象
  2. 添加基本数据对象以便于切换数据对象
  3. 将每个职员字段重新绑定至 switchingDataObject
  4. 定义更新方式和切换方式的标志和方法
  5. 将 actionPerformed 事件添加至“新建”按钮
  6. 重新绑定“更新”按钮
  7. 将事件添加至“更新”按钮的绑定程序以复位方式

1. 添加调用 createNewFullEmployeeRecord() 的新的数据源数据对象:

样本 Web Service 提供了 createNewFullEmployeeRecord 服务,而该服务会提供一个可以使用下一个可用职员标识号填充的新的空白职员记录。然后,可以使用新职员的信息填充此空白记录并将此记录提交回 Web Service。

  1. 在 Java 可视编辑器的选用板上,展开“数据对象”抽屉并选择数据源数据对象
  2. 将鼠标指针移至设计视图的空白区域或自由格式区域上并左键单击以放下数据源数据对象。会添加新的数据源数据对象并且会在自由格式区域上显示它。

    自由格式区域上的数据源数据对象。未配置。

  3. 右键单击数据源数据对象并选择重命名字段。将该数据对象重命名为 newEmployeeRecord
  4. 右键单击 newEmployeeRecord 数据对象并选择绑定属性。“数据绑定”对话框打开。
  5. 数据源字段中,选择 webServiceDataSource。
  6. 服务字段中,选择 createNewFullEmployeeRecord()。
  7. 单击确定

    newEmployeeRecord 数据对象,已连接至 webServiceDataSource

    在自由格式区域上,会看到 newEmployeeRecord 数据源数据对象已绑定至 Web Service。

2. 添加基本数据对象以便于切换数据对象:

因为详细信息字段和“更新”按钮需要切换方式(用于执行更新和创建新职员),所以在不同的时候它们需要绑定至两个不同的数据对象。为了便于完成此步骤,将添加名为 switchingDataObject 的基本数据对象。将使用此基本数据对象来切换 selectedEmployeeRecord 与 newEmployeeRecord 之间文本字段的绑定。

新的基本数据对象只指向在前面的练习中定义的另一个数据对象(selectedEmployeeRecord)。当您创建一个方法来告知此基本数据对象使用先前创建的 newEmployeeRecord 的方法时,这个新的数据对象将很有用。换句话说,此基本数据对象将起到中间数据对象的作用,它会在 selectedEmployeeRecord 数据对象与 newEmployeeRecord 数据对象之间进行切换,从而使得应用程序中的可视组件可以使用两个不同的数据对象。
  1. 在可视编辑器选用板上,选择基本数据对象并将它放到自由格式区域上。会添加 basicDataObject。

    自由格式区域上的基本数据对象,未配置

  2. 将该数据对象重命名为 switchingDataObject
  3. 在 switchingDataObject 的“属性”视图中,将 sourceObject 属性设置为 selectedEmployeeRecord。可以从该属性的“值”列的下拉菜单中,选择 selectedEmployeeRecord。

    自由格式区域上的 switchingDataObject,已连接至 selectedEmployeeRecord 数据对象

    现在,switchingDataObject 指的是 selectedEmployeeRecord 并且反映相同的值。

3. 将每个职员字段重新绑定至 switchingDataObject:

即使每个职员详细信息字段已绑定至 selectedEmployeeRecord,现在您也需要将它们绑定至 switchingDataObject。在绑定这些字段之后,根据您是正在修改现有的职员记录还是在添加新的职员记录,可以在字段的数据对象之间动态地进行切换。

对于职员详细信息部分中的每个字段,完成下列步骤:

  1. 选择字段并单击绑定选项卡。
  2. 在“字段数据绑定”对话框中,选择 switchingDataObject。前面已将这些字段绑定至 selectedEmployeeRecord。

    显示 lastNameField 已绑定至 switchingDataObject 上的 lastName 属性的“字段数据绑定”对话框

  3. 确保该字段仍然绑定至正确的数据对象属性并单击确定。如果在设计视图上选择该字段,则可以看到绑定程序线现在指向 switchingDataObject。

    绑定至 switchingDataObject 的详细信息字段

4. 定义标志和方法以便更新和切换方式:

以下 updateMode() 方法将检查是否将方式标志设置为新建,然后相应地更改应用程序行为。缺省情况下,布尔值标志 isNewMode 设置为 false,updateMode() 方法会启用 EMPLOYEE 表、启用过滤器字段并将更新按钮上的文本设置为“更新”。如果 isNewMode 设置为 true,则会禁用 EMPLOYEE 表并清除任何选择,会禁用过滤器字段并且更新按钮上的文本会设置为“添加”。

将以下代码添加至 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. 重新绑定“更新”按钮:

在前面的练习中,对更新按钮进行了编程以对 Web Service 使用 modifyEmployee 方法。该操作是作为 SwingDataServiceAction 实现的。SwingDataServiceAction 的其中一个属性是源对象,它充当服务的自变量。修改操作的源对象当前设置为 selectedEmployeeRecord。为了对该按钮进行编程以控制更新和添加,将重新配置该按钮的操作以将 switchingDataObject 用作 modifyEmployee 服务的自变量:
  1. 在设计视图中,选择更新按钮。注意,粉红的虚线箭头显示 selectedEmployeeRecord 是服务调用的自变量。
  2. 单击更新按钮上的绑定选项卡。
  3. 自变量字段中,选择 switchingDataObject。

    “更新”按钮的“组件操作绑定”现在使用 switchingDataObject

  4. 单击确定

    现在,注意该按钮的操作已配置为将 switchingDataObject 用作 modifyEmployee 方法的自变量:

    已绑定至 Web Service 且将 switchingDataObject 作为自变量的“更新”按钮

7. 将事件添加至“更新”按钮的绑定程序以复位方式:

在单击更新按钮并对 Web Service 完成操作之后,您想要将应用程序返回到它的缺省方式和行为。为此,将事件侦听器添加在该按钮的操作绑定程序上,该绑定程序将在执行更新或添加之后更新方式并刷新表。

  1. 在设计视图中,选择更新按钮。会有一条线显示该按钮与数据源的连接。在这条线上有一个图标,它表示用于该按钮的 SwingDataServiceAction,而 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, 2005. All Rights Reserved.