正文

进销存管理系统(22)

Java项目开发案例全程实录(第2版) 作者:明日科技


1.12 开发技巧与难点分析

本系统使用的是MDI窗体模式开发的程序界面,它使用一个主窗体包含多个子窗体,子窗体只能在主窗体规定的范围内移动。这些子窗体由导航面板上的按钮调用,这些按钮需要添加事件监听器,在单击该按钮时,由事件监听器创建并初始化相应的子窗体,然后显示该子窗体。

如果为每个按钮都创建新的事件监听器对象,那至少需要20个事件监听器类,因为导航面板上定义的按钮总数和子窗体的数量是对应的,而子窗体的数量正好是20个,所以需要定义相应数量的按钮和事件监听器,这些繁琐的工作会占用大量的程序开发时间,影响工程进度。

从不同的按钮监听器所实现的业务逻辑中不难发现,它们所完成的工作基本相同,都是创建并初始化子窗体,然后显示它们。如果它们能够使用同一个事件监听器类就可以实现代码重用,同时也节省了代码工作量,提高程序开发速度。

这样的开发思路存在很多优点,但是实现起来并不容易,子窗体的名称、类名都可以获取,但是如何根据指定的类名去创建子窗体对象呢?

Java的反射功能为这个思路提供了可行性。在java.lang.reflect包中有Field类、Method类和Constructor类,这3个类分别描述类的字段、方法和构造方法。这里需要的就是类的构造方法,只有调用类的构造方法才能创建该类的实例对象。可以通过Class类的getConstructor()方法获取Constructor类的实例对象,然后调用该对象的newInstance()方法创建类的实例对象。关键代码如下:

例程32 代码位置:光盘\TM\01\JXCManager\src\com\lzw\JXCFrame.java

try {

Class fClass = Class.forName("internalFrame." + frameName);

Constructor constructor = fClass.getConstructor(null);

jf = (JInternalFrame) constructor.newInstance(null);

ifs.put(frameName, jf);

} catch (Exception e) {

e.printStackTrace();

}

代码贴士

调用Class类的forName()方法加载指定的Java类,该方法将返回该类的Class实例对象。

调用指定类的getConstructor()方法获取指定的构造器。方法中使用null作参数,是调用该类的默认构造器,因为类的默认构造器没有任何参数。

调用构造器的newInstance()方法,同样传递参数null,这样就可以调用默认的构造方法创建子窗体对象。

1.13  使用PowerDesigner逆向生成数据库E-R图

在开发一个新的程序时,为提高开发速度,经常修改现有的与将要开发的程序相类似的旧程序。同样,功能相似的程序,其数据库也基本相似,甚至完全相同,此时便可以直接使用原有的数据库,从而节省数据库设计的时间和工作量。而要分析一个数据库的数据结构和连接关系,E-R图是最好的数据库资料。但是原有的数据库也许是多年以前的,或者是借鉴同事的,资料不一定完整,也不一定存在E-R图。这就给数据库分析带来了很大的不便。

如果能够使用相应的设计工具将数据库的结构和关系抽象成E-R图,就可以为系统分析员提供相应的数据库资料,从而分析或修改原有数据库。本节将介绍如何使用PowerDesigner工具实现数据库E-R图的逆向生成。

(1)在开始逆向生成E-R图之前,需要为指定的数据库创建ODBC数据源。以Windows 2003操作系统为例,选择“开始”/“运行”命令,在弹出的“运行”对话框中的“打开”文本框中输入odbcad32.exe,然后单击“确定”按钮,启动数据源管理器。

(2)在“ODBC数据源管理器”对话框中单击“添加”按钮。

(3)在弹出的“创建新数据源”对话框中选择SQL Server选项,单击“完成”按钮,如图1.33所示。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号