在此练习中,将启用应用程序来添加新的职员记录。因为对于添加新职员来说,应用程序的行为比较复杂并且是动态的,所以此练习本身会比较复杂并且会要求您对源代码进行一些手工更改。另外,此练习会演示数据对象的一些高级功能,并且提供了一个具有创意的方法示例,可以借助这些方法使用绑定程序和数据对象来满足您的需要。
以下列表描述应用程序的必需行为:
要添加此行为,完成此练习中概括的下列步骤:
样本 Web Service 提供了 createNewFullEmployeeRecord 服务,而该服务会提供一个可以使用下一个可用职员标识号填充的新的空白职员记录。然后,可以使用新职员的信息填充此空白记录并将此记录提交回 Web Service。
在自由格式区域上,会看到 newEmployeeRecord 数据源数据对象已绑定至 Web Service。
因为详细信息字段和“更新”按钮需要切换方式(用于执行更新和创建新职员),所以在不同的时候它们需要绑定至两个不同的数据对象。为了便于完成此步骤,将添加名为 switchingDataObject 的基本数据对象。将使用此基本数据对象来切换 selectedEmployeeRecord 与 newEmployeeRecord 之间文本字段的绑定。
新的基本数据对象只指向在前面的练习中定义的另一个数据对象(selectedEmployeeRecord)。当您创建一个方法来告知此基本数据对象使用先前创建的 newEmployeeRecord 的方法时,这个新的数据对象将很有用。换句话说,此基本数据对象将起到中间数据对象的作用,它会在 selectedEmployeeRecord 数据对象与 newEmployeeRecord 数据对象之间进行切换,从而使得应用程序中的可视组件可以使用两个不同的数据对象。现在,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 Service 完成操作之后,您想要将应用程序返回到它的缺省方式和行为。为此,将事件侦听器添加在该按钮的操作绑定程序上,该绑定程序将在执行更新或添加之后更新方式并刷新表。
要点:要将事件添加至该按钮的绑定程序而不是该按钮本身。
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) {} });
现在,当运行应用程序时,可以单击新建按钮并添加新的职员记录。