swing图书管理系统项目视频来自这里
一,项目建包及包命名规则
1.本次项目建包有view,util,model,dao四个包,含义分别为:
dao ----> 图书和图书类别的添加和维护功能方面涉及到的与数据库相关的操作,增删改查等方法;
model ---->包内的Book.java和BookType.java封装图书和图书类别的成员属性和成员方法,可以理解为图书和图书类别的抽象概念模型;
util ----> 封装数据库的连接关闭类,以及判断对象是否为空这一方法的封装类
view ----> 封装界面类及各组件事件监听方法的包
大致简单的考虑下,我们就可以明白这样建包的好处是把不同作用的类分包归类,便于维护。而每个包内不同类的编写也是将界面,方法,事物抽象模型方法这三者分开编写,正好符合面向对象的编程思想。
2.包名的命名规则:
Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个 Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。例如 www.java1234.com 那么包名就是 com.java1234.XXX
二.更改swing 默认字体代码分享
copy自视频配套源代码
1 //改变系统默认字体
2 Font font = new Font("Dialog", Font.PLAIN, 12);
3 java.util.Enumeration keys = UIManager.getDefaults().keys();
4 while (keys.hasMoreElements()) {
5 Object key = keys.nextElement();
6 Object value = UIManager.get(key);
7 if (value instanceof javax.swing.plaf.FontUIResource) {
8 UIManager.put(key, font);
9 }
10 }
三.登录验证
将输入的用户名及密码发送给数据库进行匹配用户查询,返回结果集不为空则证明该用户存在,登陆成功。否则登录失败
登陆按钮事件监听代码如下:[有别于视频配套的源代码,去掉了User.java,需要注意的是仅此user类可去,不同于Book和BookType类]
1 private void jb_logonActionPerformed(java.awt.event.ActionEvent evt) {
2 String userName = userNameTxt.getText();
3 String password = new String(passWordTxt.getPassword());
4 if (StrUtil.isEmpty(userName)) {
5 JOptionPane.showMessageDialog(null, "用户名不能为空");
6 return;
7 }
8 if (StrUtil.isEmpty(password)) {
9 JOptionPane.showMessageDialog(null, "密码不能为空");
10 return;
11 }
12 //User user = new User(userName, password);
13 Connection conn = null;
14 try {
15 conn = dbUtil.getCon();
16 ResultSet rs = (ResultSet) userDao.login(conn, userName, password);
17
25 if (rs.next()) {
26 this.dispose();
27 new MainFrm().setVisible(true);
28 } else {
29 JOptionPane.showMessageDialog(null, "登陆失败");
30 }
31 } catch (Exception e) {
32 // TODO Auto-generated catch block
33 JOptionPane.showMessageDialog(null, "登陆失败");
34 e.printStackTrace();
35 } finally {
36 try {
37 dbUtil.conClose(conn);
38 } catch (Exception e) {
39 // TODO Auto-generated catch block
40 e.printStackTrace();
41 }
42 }
43 }
数据库查询匹配用户名密码实现代码如下:
UserDao.java
1 package com.java1234.dao;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7
8 import com.java1234.model.User;
9
10 public class UserDao {
11 public ResultSet login(Connection conn, String userName, String password) throws Exception{
12 String sql = "select * from t_user where userName = ? and password = ?";
13 PreparedStatement pst = conn.prepareStatement(sql);
14 pst.setString(1, userName);
15 pst.setString(2, password);
16
17 return pst.executeQuery();
18 }
19 }
四.pane和panel
1.两者的区别
参考 http://simon.blog.51cto.com/80/122148
2.为什么使用JDesktopPane
附上API中的JDesktopPane 介绍摘录:
public class JDesktopPane extends JLayeredPane implements Accessible
用于创建多文档界面或虚拟桌面的容器。用户可创建 JInternalFrame
对象并将其添加到 JDesktopPane
。此类通常用作 JInternalFrames
的父类,为 JInternalFrames
提供一个可插入的 DesktopManager
对象。
当我们看过后面的运行界面后就会发现,各个功能的操作界面都是在主界面MainFrm所包含的区域内显示,而不能够拖动到外区域。这就好比说每个功能的 JInternalFrames
都将MainFrm当作桌面一样。JDesktopPane 有点抽象的类似虚拟机,MainFrm则为外面的操作系统,因为在外面的操作系统中不能够“运行” 某些应用程序,(也即作为顶层容器,JFrame中不能直接容纳JInternalFrames
组件)。所以我们可以在此基础上装个虚拟机JDesktopPane,在虚拟机内部“运行”
这类
JInternalFrames
应用程序。