设置按钮文本为“删除” resetButton 设置动作监听器为 DelActionListener类的实例对象 (2)编写initComboBox()方法,用于初始化\选择供应商\下拉列表框。该方法调用Dao类的getGysInfos()方法获取数据库中所有的供应商信息,然后将供应商的ID编号和供应商名称封装成Item对象并添加到\选择供应商\下拉列表框中,在下拉列表框中Item的toString()方法将显示供应商的名称。initComboBox()方法的关键代码如下:
例程18 代码位置:光盘\\TM\\01\\JXCManager\\src\\internalFrame\\gysGuanLi\\GysXiuGaiPanel.java
1. 2. 3. 4. 5. 6. 7. 8. 9.
public void initComboBox() { //初始化供应商下拉列表框的方法
List gysInfo = Dao.getGysInfos(); //调用getGysInfos()方法获取供应商列表
List
gys.removeAllItems(); //清除下拉列表框中原有的选项
for (Iterator iter = gysInfo.iterator(); iter.hasNext();) { List element = (List) iter.next();
Item item = new Item(); //封装供应商信息 item.setId(element.get(0).toString().trim()); item.setName(element.get(1).toString().trim()); //如果 Items 列表中包含该供应商的封装对象
11. continue; //跳出本次循环 12. items.add(item);
13. gys.addItem(item);
//否则添加该对象到下拉列表框中 14. }
15. doGysSelectAction();
//doGysSelectAction() 方法 16. } 17.
(3)编写doGysSelectAction()方法,它在更改下拉列表框中的供应商信息时被调用,主要用于根据选择的供应商名称,把供应商的其他信息填充到相应的文本框中。关键代码如下:
例程19 代码位置:光盘\\TM\\01\\JXCManager\\src\\internalFrame\\gysGuanLi\\GysXiuGaiPanel.java
1.
private void doGysSelectAction() { //处理供应商选择事件 2.
Item selectedItem;
删除供应商信息 10. if (items.contains(item))
3. 4. 5. 6.
if (!(gys.getSelectedItem() instanceof Item)) { return; }
selectedItem = (Item) gys.getSelectedItem(); //获取 Item 对象
7. 8. 9.
TbGysinfo gysInfo = Dao.getGysInfo(selectedItem); //通过 Item 对象调用 getGysInfo() 方法获取供应商信息 quanChengF.setText(gysInfo.getName()); //填充供应商信息到文本框中
diZhiF.setText(gysInfo.getAddress());
10. jianChengF.setText(gysInfo.getJc()); 11. bianMaF.setText(gysInfo.getBianma()); 12. dianHuaF.setText(gysInfo.getTel()); 13. chuanZhenF.setText(gysInfo.getFax()); 14. lianXiRenF.setText(gysInfo.getLian());
15. lianXiRenDianHuaF.setText(gysInfo.getLtel()); 16. EMailF.setText(gysInfo.getMail()); 17. yinHangF.setText(gysInfo.getYh()); 18. }
1.7.4 供应商修改与删除实现过程(2)
(4)创建ModifyActionListener类,该类是\修改\按钮的事件监听器,它必须实现ActionListener接口,并在actionPerformed()方法中获取所有文本框内容,其中包括修改后的信息,并通过调用updateGys()方法将这些供应商信息更新到数据库中。关键代码如下:
例程20 代码位置:光盘\\TM\\01\\JXCManager\\src\\internalFrame\\gysGuanLi\\GysXiuGaiPanel.java
1. 2. 3. 4. 5. 6. 7. 8. 9.
class ModifyActionListener implements ActionListener { //“修改”按钮的事件监听器
public void actionPerformed(ActionEvent e) { Item item = (Item) gys.getSelectedItem(); TbGysinfo gysInfo = new TbGysinfo(); //创建供应商实体对象
gysInfo.setId(item.getId()); //初始化供应商实体对象
gysInfo.setAddress(diZhiF.getText().trim()); gysInfo.setBianma(bianMaF.getText().trim()); gysInfo.setFax(chuanZhenF.getText().trim()); gysInfo.setYh(yinHangF.getText().trim());
10. gysInfo.setJc(jianChengF.getText().trim()); 11. gysInfo.setName(quanChengF.getText().trim()); 12. gysInfo.setLian(lianXiRenF.getText().trim());
13. gysInfo.setLtel(lianXiRenDianHuaF.getText().trim()); 14. gysInfo.setMail(EMailF.getText().trim());
15. gysInfo.setTel(dianHuaF.getText().trim());
16. if (Dao.updateGys(gysInfo) == 1)
//更新供应商信息
17. JOptionPane.showMessageDialog(GysXiuGaiPanel.
this, \修改完成\ 18. else
19. JOptionPane.showMessageDialog(GysXiuGaiPanel.
this, \修改失败\ 20. } 21. }
(5)创建DelActionListener类,该类是\删除\按钮的事件监听器,它必须实现ActionListener接口,并在actionPerformed()方法中获取当前选择的供应商,然后调用Dao类的delete()方法从数据库中把该供应商删除。关键代码如下:
例程21 代码位置:光盘\\TM\\01\\JXCManager\\src\\internalFrame\\gysGuanLi\\GysXiuGaiPanel.java
1. 2. 3. 4. 5. 6. 7. 8. 9.
class DelActionListener implements ActionListener { //“删除”按钮的事件监听器
public void actionPerformed(ActionEvent e) { Item item = (Item) gys.getSelectedItem(); //获取当前选择的供应商
if (item == null || !(item instanceof Item)) return;
int confirm = JOptionPane.showConfirmDialog( //弹出确认删除对话框
GysXiuGaiPanel.this, \确认删除供应商信息吗?\ //如果确认删除
11. int rs = Dao.delete(\
id='\调用delete()方法
12. + item.getId() + \ 13. if (rs > 0) {
14. JOptionPane.showMessageDialog(GysXiuGaiPanel.
this, //显示删除成功对话框
15. \供应商:\。删除成功\ 16. gys.removeItem(item); 17. } else {
18. JOptionPane.showMessageDialog(GysXiuGaiPanel.this, 19. \无法删除客户:\。\ 20. } 21. } 22. } 23. }
10. if (confirm == JOptionPane.YES_OPTION) {
1.7.5 单元测试(1)
在现代软件开发过程中,单元测试成为与编写代码同步进行的开发活动。单元测试能够提高程序员对程序的信心,保证程序的质量,加快软件开发速度,使程序易于维护。 1.单元测试概述
单元测试是在软件开发过程中要进行的最低级别的测试活动。在单元测试活动中,软件的独立工作单元将在与程序的其他部分相隔离的情况下进行测试。
在传统的结构化编程语言中,如Java语言,要进行测试的工作单元一般是方法。在像C++这样的面向对象的语言中,要进行测试的基本单元是类。单元测试不仅仅是作为无错编码的一种辅助手段在一次性的开发过程中使用,还必须是可重复的,无论是在软件修改或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行。 2.什么是单元测试 它是一种验证行为
程序中的每一项功能都可以通过单元测试来验证其正确性,为以后的开发提供支持。就算是开发后期,也可以轻松地增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西。而且,它为代码的重构提供了保障。这样,我们就可以更自由地对程序进行改进。 它是一种设计行为
编写单元测试将使我们从调用者的角度观察、思考。特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。 它是一种编写文档的行为
单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,它永远保持与代码同步。
3.越到项目后期,单元测试为何越难进行
在很多项目的初期,项目中的大部分程序员都能够自觉地编写单元测试。但随着项目的进展、任务的加重,离交付时间越来越近,不能按时完成项目的风险越来越大,单元测试就往往成为牺牲品了。项目经理因为进度的压力也不重视了,程序员也因为编码的压力和无人看管而不再为代码编写单元测试了。笔者亲身经历的项目都或多或少地发生过类似这样的事情。越是在项目的后期,能够坚持编写单元测试的程序员在整个项目组中所占比例越来越低。
为了追赶项目进度,多数程序员将没有经过任何测试的程序代码上传到版本控制系统,项目经理也不再追问,照单全收。这样做的结果就是在项目后期,技术骨干人员只好加班加点进行系统集成。集成完成之后,下发给测试人员测试时,Bug的报告数量翻倍增长。程序员开始修改Bug,但有非常多的Bug隐藏得很深,一直潜伏到生产环境中去。
4.JUnit单元测试工具的介绍与使用 JUnit使用介绍
JUnit是一个单元测试框架,专门用于测试Java开发的程序。同类产品还包括Nunit(.NET)、CPPUnit(C++),都属于xUnit中的成员。目前JUnit的最新版本是JUnit 4.0,在Eclipse开发工具中已经集成了JUnit的多个版本。
在正式讲解JUnit之前,先来看一下单元测试的运行效果,如图1.23和图1.24所示。
(点击查看大图)图1.23 单元测试通过效果 (点击查看大图)图1.24 单元测试失败效果 在图1.23和图1.24中很容易发现不同颜色的警示条,图1.23所示是绿色的,图1.24所示是红色的。如果所有测试案例运行成功,就为绿色;反之,如果有一个不成功,则为红色。