方法向该组件注册。在发生操作事件时,调用该对象的 actionPerformed 方法。) 为了简化事件处理,Swing库使用Action接口扩展了原始的ActionListener接口来存储具有事件处理器的可视属性。这使得事件处理器的创建独立于可视化组件。然后,当Action在稍后与一个组件相关联时,组件直接由事件处理器自动获取信息(例如按钮标签)。
ActionButton定义按钮和菜单项的一般行为。按钮可以进行配置,以及通过Action进行某种程度的控制。使用带有按钮的Action具有除直接配置按钮之外的许多优点。许多Swing的组件都具有Action属性。在组件上设置Action时,会发生一下几种情况:Action被作为ActionListener添加到组件;组件配置自身的某些属性以匹配Action;组建在Action上安装PropertyChangeListener,这样组件可更改其属性以反映 Action 属性中的更改。 下面是系统中用到的几个ActionButton方法: ? ?
setMargin():该方法用于设置按钮的四周边界大小。
setHideActionText():该方法用于设置按钮隐藏Action对象中的文本信息,例如一个只显示图标的按钮可以取消文本是按钮更加美观。我们来对比一下: 系统设置后的标准情况:
没有隐藏Action对象中的文本信息的情况:
?
setFocusPainted():该方法用于设置按钮获取焦点时,是否绘制焦点样式。导航面板取消了这个焦点样式,因为它破坏了按钮图标美观性。大家可以尝试一下,当参数设置为true时选中的按钮周围会有一个虚线方框,影像美观。 ?
setBorderPainted():该方法设置是否绘制按钮的边框样式,导航面板取消了边框样式,因为按钮的图标需要覆盖整个按钮。 没有取消边框样式的情况:
?
setContentAreaFilled():该方法设置是否绘制按钮图形,在不同的操作系统,甚至系统不同的皮肤样式中都有不同的图形。导航面板取消了按钮的图形效果,因为导航面板要使用图标绘制整个按钮。 没有取消按钮图形效果的情况:
? ?
setRolloverIcon():该方法用于设置鼠标经过按钮时,按钮所使用的图标。 setPressedIcon():该方法用于设置鼠标按下时,按钮所使用的图标。
// 主窗体菜单项的单击事件监听器 protected final class openFrameAction extends AbstractAction {
}
private String frameName = null; private openFrameAction() {}
public openFrameAction(String cname, String frameName, Icon icon) {
this.frameName = frameName;
putValue(Action.NAME, cname); //设置Action的名称
putValue(Action.SHORT_DESCRIPTION, cname); //设置Action文本框
putValue(Action.SMALL_ICON, icon); //设置Action的图标 }
public void actionPerformed(final ActionEvent e) { }
JInternalFrame jf = getIFrame(frameName);
// 在内部窗体闭关时,从内部窗体容器ifs对象中清除该窗体。
jf.addInternalFrameListener(new InternalFrameAdapter() {
public void internalFrameClosed(InternalFrameEvent e) { }
ifs.remove(frameName);
});
if (jf.getDesktopPane() == null) { } try { }
jf.setSelected(true); e1.printStackTrace();
} catch (PropertyVetoException e1) {
desktopPane.add(jf); jf.setVisible(true);
openFrameAction类继承了AbstractAction类实现了Action接口。该类用于创建导航按钮的Action对象,并为每个导航按钮定义创建并显示不同窗体对象的动作监听器,这个监听器在被按钮被按下时,调用getIFrame()方法获取相应的窗体对象,并显示在主窗体中。 AbstractionAction.putValue()方法设置与指定键关联的 Value。
getIFrame()方法负责创建指定名称的窗体对象,在方法中使用了Java的反射技术,调用不同窗体类的默认构造方法创建窗体的对象。
反射就是把Java类中的各种成分映射成为相应的Java类。例如,一个Java类中用一个Class类的对象来表示,一个类中的组成成分:成员变量,方法,构造方法,包等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速器等等也是一个个的类。表示Java类的Class类显然要提供一系列的方法,来获取其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象来表示,他们是Field、Method、Contructor、Package等等。Field类代表某个类中的一个成员变量;Method类代表某个类中的一个成员方法;Constructor类代表某个类中的一个构造方法。
公共模块设计
在本系统的项目空间中,有部分模块是公用的,或者是多个模块甚至整个系统的配置信息,他们被多个模块重复调用完成指定的业务逻辑,下面我们将分别介绍这些公共模块。
Dao公共类
protected static String dbClassName =\;
protected static String dbUrl =\; protected static String dbUser = \; protected static String dbPwd = \; protected static String second = null; public static Connection conn = null; static { }
try { }
if (conn == null) { }
ee.printStackTrace();
Class.forName(dbClassName).newInstance();
conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
} catch (Exception ee) {
Dao公共类主要负责有关数据库的操作,该类在静态代码块中加载驱动并连接数据库,然后将所有的数据库访问方法定义为静态的。 ? ? ? ? ?
dbClassName:该成员变量用于定义数据库驱动类的名称。 dbUrl:该成员变量用于定义访问数据库的URL路径。 dbUser:该成员变量用于定义访问数据库的用户名。 dbPwd:该成员变量用于定义访问数据库的用户密码。 conn:该成员变量用于定义连接数据库的对象。
// 添加供应商信息的方法
public static boolean addGys(TbGysinfo gysInfo) { }
addGys()方法用于添加供应商的基础信息,它接受供应商的实体类TbGysinfo作方法的参数,然后把实体对象的所有属性存入供应商数据表中。
if (gysInfo == null)
return false;
+ gysInfo.getName() + \ + gysInfo.getJc() + \ + gysInfo.getAddress() + \ + gysInfo.getBianma() + \ + gysInfo.getTel() + \ + gysInfo.getFax() + \ + gysInfo.getLian() + \ + gysInfo.getLtel() + \ + gysInfo.getMail() + \ + gysInfo.getYh() + \);
return insert(\tb_gysinfo values('\ + gysInfo.getId() + \
public class TbGysinfo implements java.io.Serializable {
private String id; public TbGysinfo() {}
public TbGysinfo(String id) { this.id = id;
}
public String getId() { return this.id; }
public String getId() { return this.id; } }
供应商的基础信息包括id,name等,在这里我们仅以id为例。
为了外部用户能够访问某些私有变量,通常类的设计者会提供一些方法给外部调用,这些方法被称为访问接口。私有变量很好地贯彻了封装原则,所有的私有变量都只能通过程序员设计的接口来访问,任何外部使用者都无法直接访问它,所以有很高的安全性。但是通过接口访问私有变量,将降低程序的性能,这样就往往需要我们在安全性和效率间取得一个平衡。
程序中黄色衬底突出的部分:是一个无参构造方法和一个带参数的构造方法。Java规定,如果程序员一个构造方法都不定义,那么系统会自动为其加上一个不带参数的构造方法。如果程序员至少定义了一个构造方法,那么系统不会再提供不带参数的构造方法。强烈建议程序员在定义带参数的构造方法时,也要定义一个不带参数的构造方法,即便这个构造方法什么事情也不做,否则存在着很大的安全威胁。
程序中淡蓝色衬底突出的部分:类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
序列化简单的说就是为了保存在内存中的各种对象的状态(也就是变量,不是方法),并且可以把保存的对象状态再读出来。
需要进行序列化的情况:@1、当你想把内存中的对象写入到硬盘上的时候,或者把内存中的对象保存到数据库中的时候。比如说你的内存不够用了,那计算机就要将内存里面的一部分对象暂时的保存到硬盘中,等到要用的时候再读入到内存中,硬盘的那部分存储空间就是所谓的虚拟内存。在比如过你要将某个特定的对象保存到文件中,我隔几天在把它拿出来用,那么这时候就要实现Serializable接口;@2、当你想用套接字在网络上传送对象的时候;@3、当你想通过RMI传输对象的时候。
// 读取所有供应商信息
public static List getGysInfos() { }
List list = findForList(\); return list;
进货管理模块设计
相关推荐: